Вопросы-ответы по RenPy

Разработка игр на RenPy, обсуждение реализации, вопросы "Как сделать?"
Аватар пользователя
GameMaker174
Сообщений: 37
Зарегистрирован: 24 ноя 2015, 17:55
Откуда: Челябинск

Re: Вопросы-ответы по RenPy

Сообщение GameMaker174 » 21 дек 2015, 18:04

Эм...такой вопрос возник, можно ли добавить картинку персонажа сразу в init, так что бы картинка персонажа, сразу вставлялась в текст???что бы не писать каждый раз точто перс появляется на фоне :) спасибо за ответ заранее)))

Аватар пользователя
Skaz
Администратор
Сообщений: 1992
Зарегистрирован: 30 июл 2015, 14:52
Контактная информация:

Re: Вопросы-ответы по RenPy

Сообщение Skaz » 24 дек 2015, 12:03

Вопрос сформулирован непонятно.
Напишите подробнее чего хотите и приведите пример кода.

Аватар пользователя
Vitamin05
Сообщений: 156
Зарегистрирован: 31 июл 2015, 19:59

Re: Вопросы-ответы по RenPy

Сообщение Vitamin05 » 07 янв 2016, 11:44

Здравствуйте, решил чисто для себя попробовать RenPy, ну и попробовать силы решил в русификации Академии Эшворда. Скачал и установил RenPy, редактором скриптов открыл скрипт "achievements.rpy" и попробовал перевести текстовые сообщения. Получил файл скрипта такого вида.
 Свернутый текст
Изображение


Сохранив скрипт попробовал запустить игру и получил следующую ошибку:
 Свернутый текст
I'm sorry, but an uncaught exception occurred.

While parsing K:\Semag\Ashford_Academy-all/game/locations/bath.rpy.
UnicodeDecodeError: 'utf8' codec can't decode byte 0xcd in position 3084: invalid continuation byte

-- Full Traceback ------------------------------------------------------------

Full traceback:
File "K:\Semag\Ashford_Academy-all\renpy\bootstrap.py", line 289, in bootstrap
renpy.main.main()
File "K:\Semag\Ashford_Academy-all\renpy\main.py", line 249, in main
renpy.game.script.load_script() # sets renpy.game.script.
File "K:\Semag\Ashford_Academy-all\renpy\script.py", line 181, in load_script
self.load_appropriate_file(".rpyc", ".rpy", dir, fn, initcode)
File "K:\Semag\Ashford_Academy-all\renpy\script.py", line 479, in load_appropriate_file
data, stmts = self.load_file(dir, fn + source)
File "K:\Semag\Ashford_Academy-all\renpy\script.py", line 374, in load_file
stmts = renpy.parser.parse(fullfn)
File "K:\Semag\Ashford_Academy-all\renpy\parser.py", line 2262, in parse
lines = list_logical_lines(fn, filedata)
File "K:\Semag\Ashford_Academy-all\renpy\parser.py", line 177, in list_logical_lines
data = f.read()
File "/home/tom/ab/x64lucid-deps/install/lib/python2.7/codecs.py", line 671, in read
File "/home/tom/ab/x64lucid-deps/install/lib/python2.7/codecs.py", line 477, in read
UnicodeDecodeError: 'utf8' codec can't decode byte 0xcd in position 3084: invalid continuation byte

Windows-XP-5.1.2600-SP3
Ren'Py 6.18.3.761

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

Аватар пользователя
Khan
Сообщений: 877
Зарегистрирован: 30 июл 2015, 17:38
Контактная информация:

Re: Вопросы-ответы по RenPy

Сообщение Khan » 07 янв 2016, 13:32

Vitamin05 писал(а):Здравствуйте, решил чисто для себя попробовать RenPy, ну и попробовать силы решил в русификации Академии Эшворда. Скачал и установил RenPy, редактором скриптов открыл скрипт "achievements.rpy" и попробовал перевести текстовые сообщения. Получил файл скрипта такого вида.
 Свернутый текст
Изображение


Сохранив скрипт попробовал запустить игру и получил следующую ошибку:
 Свернутый текст
I'm sorry, but an uncaught exception occurred.

While parsing K:\Semag\Ashford_Academy-all/game/locations/bath.rpy.
UnicodeDecodeError: 'utf8' codec can't decode byte 0xcd in position 3084: invalid continuation byte

-- Full Traceback ------------------------------------------------------------

Full traceback:
File "K:\Semag\Ashford_Academy-all\renpy\bootstrap.py", line 289, in bootstrap
renpy.main.main()
File "K:\Semag\Ashford_Academy-all\renpy\main.py", line 249, in main
renpy.game.script.load_script() # sets renpy.game.script.
File "K:\Semag\Ashford_Academy-all\renpy\script.py", line 181, in load_script
self.load_appropriate_file(".rpyc", ".rpy", dir, fn, initcode)
File "K:\Semag\Ashford_Academy-all\renpy\script.py", line 479, in load_appropriate_file
data, stmts = self.load_file(dir, fn + source)
File "K:\Semag\Ashford_Academy-all\renpy\script.py", line 374, in load_file
stmts = renpy.parser.parse(fullfn)
File "K:\Semag\Ashford_Academy-all\renpy\parser.py", line 2262, in parse
lines = list_logical_lines(fn, filedata)
File "K:\Semag\Ashford_Academy-all\renpy\parser.py", line 177, in list_logical_lines
data = f.read()
File "/home/tom/ab/x64lucid-deps/install/lib/python2.7/codecs.py", line 671, in read
File "/home/tom/ab/x64lucid-deps/install/lib/python2.7/codecs.py", line 477, in read
UnicodeDecodeError: 'utf8' codec can't decode byte 0xcd in position 3084: invalid continuation byte

Windows-XP-5.1.2600-SP3
Ren'Py 6.18.3.761

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

Необходимо изменить саму кодировку файла на UTF8.
После перевода могут появиться артефакты в коде, их надо будет необходимо устранить.

Prohogiy
Сообщений: 6
Зарегистрирован: 09 янв 2016, 05:12

Re: Вопросы-ответы по RenPy

Сообщение Prohogiy » 09 янв 2016, 05:22

Как сделать заставку, которая автоматически включалась бы перед стартовым меню?

Prohogiy
Сообщений: 6
Зарегистрирован: 09 янв 2016, 05:12

Re: Вопросы-ответы по RenPy

Сообщение Prohogiy » 13 янв 2016, 09:50

Прошу прощения за беспокойство. Сам разобрался.

SmoOke
Сообщений: 1
Зарегистрирован: 17 янв 2016, 16:45

Re: Вопросы-ответы по RenPy

Сообщение SmoOke » 17 янв 2016, 16:48

Помогите!

В общем делаю вот так - стоит выбор,2 локации. и эти 2 локации нам нужно посетить.

1 лок - душ
2 лок - туалет.

Как сделать так,чтобы если мы пошли сначала в душ,а потом в туалет,в туалете не выпадало опять меню "в душ"?
Так же и наоборот

Аватар пользователя
Skaz
Администратор
Сообщений: 1992
Зарегистрирован: 30 июл 2015, 14:52
Контактная информация:

Re: Вопросы-ответы по RenPy

Сообщение Skaz » 18 янв 2016, 12:47

SmoOke писал(а):Как сделать так,чтобы если мы пошли сначала в душ,а потом в туалет,в туалете не выпадало опять меню "в душ"?
Так же и наоборот

Пример кода в студию.

Prohogiy
Сообщений: 6
Зарегистрирован: 09 янв 2016, 05:12

Re: Вопросы-ответы по RenPy

Сообщение Prohogiy » 27 янв 2016, 05:28

С уважением и надеждой, здравствуйте.
Здесь разобраться самостоятельно как-то не получается.
Дело вот в чём.
Картинки объявлены правильно, потому что как изображения они нормально отображаются. Но только прописываешь их в анимацию, программа говорит, что файлы не загружаемые.
Помогите, если не трудно.

Аватар пользователя
Skaz
Администратор
Сообщений: 1992
Зарегистрирован: 30 июл 2015, 14:52
Контактная информация:

Re: Вопросы-ответы по RenPy

Сообщение Skaz » 27 янв 2016, 07:30

Prohogiy писал(а):Картинки объявлены правильно, потому что как изображения они нормально отображаются. Но только прописываешь их в анимацию, программа говорит, что файлы не загружаемые.
Помогите, если не трудно.

Оставляя подобные сообщение, добавляйте
а) Код, который работает
б) Код, который не работает.
в) Текст ошибки

Prohogiy
Сообщений: 6
Зарегистрирован: 09 янв 2016, 05:12

Re: Вопросы-ответы по RenPy

Сообщение Prohogiy » 27 янв 2016, 17:19

Прошу прощения. Сейчас исправлюсь.
Когда показываешь картинку
scene bg blak
show star28 at Position(xpos=.5, ypos=.5, xanchor=0, yanchor=0)
всё работает.
Стоит прописать самую простую анимацию, вот так:
image star1a = Animation(
"star6.png", 1.0,
"star16.png", 1.0,
"star28.png", 1.0)
выдаёт ошибку:
C:\Tor\renpy-6.9.3-rus\Itana/game/script.rpy:36 Image star1a uses file 'star6.png', which is not loadable.

C:\Tor\renpy-6.9.3-rus\Itana/game/script.rpy:36 Image star1a uses file 'star16.png', which is not loadable.

C:\Tor\renpy-6.9.3-rus\Itana/game/script.rpy:36 Image star1a uses file 'star28.png', which is not loadable.

Аватар пользователя
Dron
Сообщений: 346
Зарегистрирован: 31 июл 2015, 15:30

Re: Вопросы-ответы по RenPy

Сообщение Dron » 27 янв 2016, 18:11

Prohogiy писал(а):Прошу прощения. Сейчас исправлюсь.
Когда показываешь картинку
scene bg blak
show star28 at Position(xpos=.5, ypos=.5, xanchor=0, yanchor=0)
всё работает.
Стоит прописать самую простую анимацию, вот так:
image star1a = Animation(
"star6.png", 1.0,
"star16.png", 1.0,
"star28.png", 1.0)
выдаёт ошибку:
C:\Tor\renpy-6.9.3-rus\Itana/game/script.rpy:36 Image star1a uses file 'star6.png', which is not loadable.

C:\Tor\renpy-6.9.3-rus\Itana/game/script.rpy:36 Image star1a uses file 'star16.png', which is not loadable.

C:\Tor\renpy-6.9.3-rus\Itana/game/script.rpy:36 Image star1a uses file 'star28.png', which is not loadable.


Возможно я не прав, но у вас наверное картинки star6.png и т.п. лежат не в папке game, а где-то в подпапках ? Потому что обычно такое сообщение возникает при неправильном пути к изображению. Путь считается относительно папки game. А в первом примере путь как раз не задается, там вызывается уже описанное в другом месте (с правильным путем) изображение.
В любом деле главное - творческий подход.

Prohogiy
Сообщений: 6
Зарегистрирован: 09 янв 2016, 05:12

Re: Вопросы-ответы по RenPy

Сообщение Prohogiy » 28 янв 2016, 11:21

Вы совершенно правы. Огромное спасибо!
Просто в демке никак не видно, что для анимации нужно прописывать полный путь к картинке.

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

И ещё. Последняя версия RenPy у меня тоже есть, но она глючит. Не отображаются переходы. Вместо них экран в клеточку. Я думаю, что это из-за слабости компа. Процессор: два ядра по 1,6 ГГц (нетбук). Или могут быть другие причины?

Prohogiy
Сообщений: 6
Зарегистрирован: 09 янв 2016, 05:12

Re: Вопросы-ответы по RenPy

Сообщение Prohogiy » 29 янв 2016, 04:00

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

1. SMAnimation работает только с цветом фона, как в демке, или может работать и с другими объектами? Например, с картинками.

2. Короткая анимация (около 1,5 с) появляется в случайном месте экрана.
$ gtms1 = renpy.random.randint(1, 948)
$ gtms2 = renpy.random.randint(1, 568)
show star1b at Position(xpos=gtms1, ypos=gtms2, xanchor=0.5, yanchor=0.5)
Как это зациклить, чтобы для каждой новой прокрутки генерировалось новое местоположение?

Аватар пользователя
Skaz
Администратор
Сообщений: 1992
Зарегистрирован: 30 июл 2015, 14:52
Контактная информация:

Re: Вопросы-ответы по RenPy

Сообщение Skaz » 29 янв 2016, 10:51

Prohogiy писал(а):2. Короткая анимация (около 1,5 с) появляется в случайном месте экрана.
$ gtms1 = renpy.random.randint(1, 948)
$ gtms2 = renpy.random.randint(1, 568)
show star1b at Position(xpos=gtms1, ypos=gtms2, xanchor=0.5, yanchor=0.5)
Как это зациклить, чтобы для каждой новой прокрутки генерировалось новое местоположение?

Насколько я понял, вам нужен оператор цикла.
Почитайте про цикл while здесь:
http://www.renpy.org/doc/html/conditional.html

tukreb
Сообщений: 14
Зарегистрирован: 30 ноя 2015, 04:36

Re: Вопросы-ответы по RenPy

Сообщение tukreb » 27 фев 2016, 22:47

Кстати, побуду КО, если в курсе.

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

tukreb
Сообщений: 14
Зарегистрирован: 30 ноя 2015, 04:36

Re: Вопросы-ответы по RenPy

Сообщение tukreb » 28 фев 2016, 20:57

Если у кого-нить идея, как лучше реализовать систему ивентов? Чтобы она была понятной и не сложной. Та, что в Тренере Ведьм, как то выглядит не совсем понятно, либо я не уловил всей её сути.

Аватар пользователя
Skaz
Администратор
Сообщений: 1992
Зарегистрирован: 30 июл 2015, 14:52
Контактная информация:

Re: Вопросы-ответы по RenPy

Сообщение Skaz » 29 фев 2016, 11:02

tukreb писал(а):Если у кого-нить идея, как лучше реализовать систему ивентов? Чтобы она была понятной и не сложной. Та, что в Тренере Ведьм, как то выглядит не совсем понятно, либо я не уловил всей её сути.

Система ивентов в Тренере ведьмы действительно нетривиальна. Достоинство ее в том, что можно задать условия выполнения ивентов большой сложности. Например:
Исполнить ивент А только в том случае, если распущенность Гермионы между 6 и 9, при этом не выполнен ивент С, а ивент В выполнен хотя бы трижды, но с момента его последнего выполнения прошло не больше суток игрового времени.
Исполнить ивент А два только раза, второй раз можно исполнить только если после первого исполнения прошло больше двух суток игрового времени.

Условия выполнения всех ивентов описаны в одной секции, что довольно наглядно, есть система разрешения конфликтов (если одновременно наступают условия выполнения двух ивентов) и пр.

Из-за такой навороченности пользоваться ей без подробного описания классов вряд ли получится.

Если нужно что-то совсем простое, можно предложить систему, которой пользовался Акабур. На каждый ивент по одному или несколько флажков (флажок - логическая или целая переменная). После выполнения ивента флажок меняется.
Чтобы не таскать кучу флажков все это можно запихнуть в единый словарь. Если посмотреть реализацию системы ивентов в Ведьме, то, грубо говоря, там так и сделано, а для работы со словарем состояний ивентов написаны классы.

tukreb
Сообщений: 14
Зарегистрирован: 30 ноя 2015, 04:36

Re: Вопросы-ответы по RenPy

Сообщение tukreb » 01 мар 2016, 01:00

Skaz писал(а):
tukreb писал(а):Если у кого-нить идея, как лучше реализовать систему ивентов? Чтобы она была понятной и не сложной. Та, что в Тренере Ведьм, как то выглядит не совсем понятно, либо я не уловил всей её сути.

Система ивентов в Тренере ведьмы действительно нетривиальна. Достоинство ее в том, что можно задать условия выполнения ивентов большой сложности. Например:
Исполнить ивент А только в том случае, если распущенность Гермионы между 6 и 9, при этом не выполнен ивент С, а ивент В выполнен хотя бы трижды, но с момента его последнего выполнения прошло не больше суток игрового времени.
Исполнить ивент А два только раза, второй раз можно исполнить только если после первого исполнения прошло больше двух суток игрового времени.

Условия выполнения всех ивентов описаны в одной секции, что довольно наглядно, есть система разрешения конфликтов (если одновременно наступают условия выполнения двух ивентов) и пр.

Из-за такой навороченности пользоваться ей без подробного описания классов вряд ли получится.

Если нужно что-то совсем простое, можно предложить систему, которой пользовался Акабур. На каждый ивент по одному или несколько флажков (флажок - логическая или целая переменная). После выполнения ивента флажок меняется.
Чтобы не таскать кучу флажков все это можно запихнуть в единый словарь. Если посмотреть реализацию системы ивентов в Ведьме, то, грубо говоря, там так и сделано, а для работы со словарем состояний ивентов написаны классы.

Частично я разобрался в сути, и уже заметил некоторые удобные возможности в условиях, но есть некоторые сложности в частности, я не понимаю, почему не идёт на True, если я правильно понял, как работает это

Код: Выбрать все

this.Where({"DAY"})     .AddStep("begin_01:test-true",                 ready= lambda e: day == 5 )

Далее

Код: Выбрать все

label begin_01:
    m "Хм....."
    m "Хмхмхм.."
    menu:
        " True "  if this.Has("test-true"):   
            m "test-true is True"
        " False ":
            m "test-true is False"

    $this.begin_01.Finalize()
    jump night_start

В данном случае всегда получается False, что я упустил, если у Вас есть идеи?

tukreb
Сообщений: 14
Зарегистрирован: 30 ноя 2015, 04:36

Re: Вопросы-ответы по RenPy

Сообщение tukreb » 01 мар 2016, 01:21

А уже всё понял как это работает, если кому интересно, то этот код всё объяснит

Код: Выбрать все

        this.Where({"DAY"})     .AddStep("begin_01:test-true",    ready= lambda e: day == 5 )
        this                    .AddStep("begin_00",                 ready= lambda e: day == 6 )


После выполнения begin_01 и его завершение, на флаг test-true выставиться true.

Код: Выбрать все

label begin_00:
    m "Хм....."
    m "Хм....Хм....."
    menu:
        " True " if this.Has("test-true"):   
            m "test-true is True"
        " False ":
            m "test-true is False"
    $this.begin_00.Finalize()
    jump night_start

label begin_01:
    m "Хм....."
    m "Хм....Хм....."
    menu:
        " True " if this.Has("test-true"):   
            m "test-true is True"
        " False ":
            m "test-true is False"

    $this.begin_01.Finalize()
    jump night_start


и правда это избавляет от ненужный переменных в дальнейшем.

Аватар пользователя
Skaz
Администратор
Сообщений: 1992
Зарегистрирован: 30 июл 2015, 14:52
Контактная информация:

Re: Вопросы-ответы по RenPy

Сообщение Skaz » 01 мар 2016, 10:20

tukreb писал(а):А уже всё понял как это работает, если кому интересно, то этот код всё объяснит


Энтузиазм радует. :)
В качестве подарка:
Можно сделать еще более изящно.

Код: Выбрать все

        this.Where({"DAY"})     .AddStep("begin_01", ready= lambda e: day == 5 )
        this                    .AddStep("begin_00", ready= lambda e: day == 6 )

Код: Выбрать все

label begin_00:
    m "Хм....."
    m "Хм....Хм....."
    menu:
        " True " if this.begin_01.IsDone():   
            m "test-true is True"
        " False ":
            m "test-true is False"
    wtevent.Finalize("night_start")



Ну и т.п.

tukreb
Сообщений: 14
Зарегистрирован: 30 ноя 2015, 04:36

Re: Вопросы-ответы по RenPy

Сообщение tukreb » 01 мар 2016, 18:53

Спасибо, осталось только разобраться, как определить $wtevent., чтобы она заработала, а то лишь объявлена. :lol:

В моей случае, пока проще заменить на это $this.begin_00.Finalize("night_start") :D Пока не могу разобраться с $wtevent

Аватар пользователя
Skaz
Администратор
Сообщений: 1992
Зарегистрирован: 30 июл 2015, 14:52
Контактная информация:

Re: Вопросы-ответы по RenPy

Сообщение Skaz » 02 мар 2016, 10:20

tukreb писал(а):В моей случае, пока проще заменить на это $this.begin_00.Finalize("night_start") :D

Да, думаю, в новом проекте так будет проще.

tukreb
Сообщений: 14
Зарегистрирован: 30 ноя 2015, 04:36

Re: Вопросы-ответы по RenPy

Сообщение tukreb » 04 мар 2016, 04:02

Глупости написал :D Потом перефразирую может быть. (можно удалить это сообщение)

tukreb
Сообщений: 14
Зарегистрирован: 30 ноя 2015, 04:36

Re: Вопросы-ответы по RenPy

Сообщение tukreb » 04 мар 2016, 04:53

нужно сделать кнопку удалить или уберите ограничение с редактирование :) А то, плодятся сообщения. Я всё мучаю $wtevent.Finalize пытаясь понять секрет, как его заставить заработать :)


Вернуться в «Разработка игр на RenPy»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 1 гость