-
Notifications
You must be signed in to change notification settings - Fork 0
Персонажи
Для этого сначала регистрируются "обычные" персонажи (см. Простейшие примеры), которым затем добавляется RPG-функционал.
$ ch.make_rpg("directory", "rpg_name", "start_dress")
Где
-
ch
- персонаж, который уже создан (ch = Character("NewCharacter", color="0x0000FF")
), -
directory
- часть пути к картинке 240x384, на которой в 4 ряда (строки) расположены 5 кадров (столбцы) на каждый поворот:- Кадры:
- 1, 2, 3, 4 - ходьба/бег,
- 2, 4 - стойка,
- 5 - сидячее положение.
- Ряды:
- {1, 2, 3, 4} - соответственно {на нас, налево, направо, от нас}.
- Кадры:
-
rpg_name
- имя персонажа в пути к RPG-спрайту (вроде me, dv, mt и т. д.), -
start_dress
- начальная одежда.
Целый путь до картинки вычисляется как directory + rpg_name + '_' + dress + '.png'
,
где dress
- одежда на персонаже ('pioneer'
, 'swim'
и т. д.), задаваемая функцией set_dress
(см. след. абзац).
$ register_character_animation(character, "anim_name", "path", xoffset, yoffset,
count_frames, start_frame, end_frame, time = 1.0)
Где
-
character
- персонаж (не имя персонажа), у которого регистрируется анимация, -
anim_name
- название регистрируемой анимации, -
path
- путь к изображению (без расширения) анимации (кадры в ряд), -
xoffset
,yoffset
- отступ относительно обычного состояния (целые числа), -
count_frames
- количество кадров в изображении, -
start_frame
- начальный кадр анимации, -
end_frame
- последний кадр анимации (включительно), -
time
- время, за которое анимация будет закончена.
$ character.start_animation("anim_name", repeat = 0, wait_time = -1)
Где
-
character
- персонаж, -
anim_name
- имя зарегистрированной анимации, -
repeat
определяет кол-во повторов после первого воспроизведения:- если
repeat == 0
, повторов не будет, - если
repeat < 0
, повторы будут длиться до тех пор, пока анимация не будет удалена или заменена.
- если
-
wait_time
- время (в сек.), на которое выполнение сценария ставится на паузу:- Если
wait_time < 0
(по умолчанию), то пауза продлится до тех пор, пока не пройдёт нужное кол-во повторов (если они бесконечны, то ожидания нет). - Иначе пауза продлится указанное время. Эту анимацию можно "перемотать", нажав Пробел/Enter или кликнув по фону или кнопке "Далее".
- Если
$ character.remove_animation()
Смена одежды на "need_dress"
:
$ character.set_dress("need_dress")
Показать персонажа character
в локации location
в месте place_name
:
$ show_character(character, "place_name", location = None)
Если локация не указывается (None
), то она принимается за текущую.
$ hide_character(character)
$ forget_character(character)
Создаваемые персонажи кладутся в список, который содержит всех созданных персонажей.
Во время обновления обновляются все персонажи из этого списка, даже если они не находятся на какой-либо локации.
Эта функция удаляет персонажа из этого списка и из локации (если она есть).
Рекомендуется использовать при удалении (окончательном, не просто при скрытии) персонажа для отсутствия обновлений этого персонажа.
Разрешить или запретить игроку управлять персонажем me
:
$ set_rpg_control(value)
Здесь value
- True
(чтобы разрешить) или False
(запретить).
Получить текущее значение можно функцией get_rpg_control()
.
Разрешить/Запретить игроку бег (при управлении с клавиатуры, не касается команд сценария):
set_run_allow(value)
Здесь value
определяет, нужно ли разрешить (True
) бег или же запретить (False
).
Узнать, разрешён ли бег: get_run_allow()
.
$ character.move_to_place("place_names", is_run = False, wait_time = -1, brute_force = False)
Где
-
character
- персонаж, -
place_names
- список мест, которые надо посетить, имеет вид[("location1", "place1"), ("location2", "place2"), ...]
:- Если его элемент является одной строкой (а не 2), то она считается местом предыдущей локации, а если это первый элемент, то это место текущей локации персонажа,
- Последний элемент может быть числом - номером места в списке, куда нужно перейти, чтобы ходить "по кругу",
- Если вместо списка передана строка, то она воспринимается как место текущей локации.
-
is_run
-True
(бежать) илиFalse
(идти), -
wait_time
- время (в сек.), на которое выполнение сценария ставится на паузу:- Если
wait_time < 0
(по умолчанию), то пауза продлится до тех пор, пока персонаж не дойдёт до нужного места. - Иначе пауза продлится указанное время:
- Если время уже вышло, а персонаж ещё не дошёл, то происходит переход к следующей команде,
- Если время ещё не вышло, а персонаж уже дошёл до конца, то пауза всё равно продлится указанное время. Это передвижение можно "перемотать", нажав Пробел/Enter или кликнув по фону или кнопке "Далее",
- Если
-
brute_force
- следует ли при поиске пути между точками одной локации искать более короткий путь через выход из этой локации (False
- нет, быстрый поиск только внутри 1 локации).
Функция возвращает True
, если удалось найти пути между всеми точками, иначе - False
.
Однако, если какой-то из путей не удалось найти, то персонаж всё равно будет передвигаться напрямую, сквозь все преграды (если точка, до которой не найден путь, на текущей локации) или сразу окажется в конечной точке.
Если это поведение нежелательно, то персонажа можно оставить на месте: character.move_to_place(None)
.
$ character.set_direction(direction)
Где
-
character
- персонаж, -
direction
- направление:-
to_forward
(от нас), -
to_back
(на нас), -
to_left
(влево), -
to_right
(вправо). На самом делеdirection
- число, аto_forward, to_back, to_left, to_right
- переменные, равные3, 0, 1, 2
соответственно. Однако использовать напрямую числа вместо переменных - плохая идея.
-
$ character.set_pose("pose")
Где
-
character
- персонаж, -
pose
- поза, допустимы:-
"sit"
- сидеть, -
"stance"
- стоять.
-
$ character.sit_down(obj)
Где obj
- объект, тип которого является сиденьем.
Сам объект можно получить, например, с помощью этого.
В качестве результата возвращается True
, если всё прошло успешно, или False
, если все места уже заняты другими
персонажами или объект не является сиденьем.
$ character.stand_up()
Основы
Если вы новичок, то будет достаточно прочитать лишь это, пока ваш энтузиазм не исчерпан.
Остальное можно будет прочесть по мере надобности.
Документация по RPG-части находится здесь.
Более сложные вещи
Через некоторое время вам, возможно, потребуются более продвинутые возможности.
- Функции для изображений (im-функции).
- Эффекты.
- Времена суток.
- ATL (анимации и трансформации).
- Ввод с клавиатуры.
- Введение в ScreenLang (GUI, интерфейс).
- Конфигурирование игры.
Дополнительно
- Некоторые полезные функции.
- Сигналы и таймауты.
- Технические подробности работы с изображениями.
- Технические подробности ВН-спрайтов.
- Система переводов.
- Воспроизведение видео.
- Скрин помощи.
- Прерываемые циклы.
- https.
- Система обновлений.
Перед самым началом
Советы для новичков и не только.
Оффтоп.