Урок по кастомизации персонажа (Messy character customization tutorial)
Перейти к навигации
Перейти к поиску
Очень запутанный урок по кастомизации персонажа, которую я использовала в своей игре. Многим было интересно, как это реализовать, поэтому я сделала данный урок. Он очень запутанный и есть, вероятно, лучший способ сделать кастомизацию, но я надеюсь, что он, по крайней мере, даст вам общее представление.
Архив с проектом вы можете скачать здесь.
Ниже представлены коды, используемые в проекте:
- cc_screen.rpy
define character_img = "character"
screen character_customization_screen:
modal True
tag menu
# Кнопки главного меню.
frame:
xalign .7
yalign .5
has vbox
hbox:
vbox:
$ ui.text("Расы", size= 23,color="#496682")
textbutton _("Человек") action [ SetVariable( "race", "human")]
textbutton _("Лунный эльф") action [ SetVariable( "race", "moonelf")]
vbox:
$ ui.text("Оттенки кожи", size= 23,color="#496682")
textbutton _("Цвет кожи1") action [ SetVariable( "skintone", "skin1")]
textbutton _("Цвет кожи2") action [ SetVariable( "skintone", "skin2")]
textbutton _("Цвет кожи3") action [ SetVariable( "skintone", "skin3")]
vbox:
$ ui.text("Цвета глаз", size= 23,color="#496682")
textbutton _("Цвет глаз1") action [ SetVariable( "eyecolor", "green")]
textbutton _("Цвет глаз2") action [ SetVariable( "eyecolor", "blue")]
textbutton _("Цвет глаз3") action [ SetVariable( "eyecolor", "brown")]
textbutton _("Цвет глаз4") action [ SetVariable( "eyecolor", "hazel")]
textbutton _("Цвет глаз5") action [ SetVariable( "eyecolor", "black")]
vbox:
$ ui.text("Прически", size= 23,color="#496682")
textbutton _("Стиль1") action [ SetVariable( "overhair", "country_girl"),SetVariable( "underhair", "blank")]
textbutton _("Стиль2") action [ SetVariable( "overhair", "action_girl"),SetVariable( "underhair", "blank")]
textbutton _("Стиль3") action [ SetVariable( "underhair", "bobcut"),SetVariable( "overhair", "blank")]
textbutton _("Стиль4") action [ SetVariable( "overhair", "daga-ken"),SetVariable( "underhair", "blank")]
textbutton _("Стиль5") action [ SetVariable( "overhair", "apprentice"),SetVariable( "underhair", "blank")]
textbutton _("Стиль6") action [ SetVariable( "underhair", "elven"),SetVariable( "overhair", "blank")]
textbutton _("Стиль7") action [ SetVariable( "overhair", "princess"),SetVariable( "underhair", "blank")]
textbutton _("Стиль8") action [ SetVariable( "underhair", "knight"),SetVariable( "overhair", "blank")]
hbox:
vbox:
$ ui.text("Цвета волос", size= 23,color="#496682")
textbutton _("Цвет волос1") action [ SetVariable( "haircolor", "brown")]
textbutton _("Цвет волос2") action [ SetVariable( "haircolor", "blond")]
textbutton _("Цвет волос3") action [ SetVariable( "haircolor", "red")]
textbutton _("Цвет волос4") action [ SetVariable( "haircolor", "black")]
vbox:
$ ui.text("Костюмы", size= 23,color="#496682")
textbutton _("Костюм1") action [ SetVariable( "outfit", "startermelee")]
textbutton _("Костюм2") action [ SetVariable( "outfit", "adeshian_clothes")]
textbutton _("Костюм3") action [ SetVariable( "outfit", "sailor_scout")]
vbox:
$ ui.text("Позы", size= 23,color="#496682")
textbutton _("Недовольный") action [ SetVariable( "pose", "angry")]
textbutton _("Развязный") action [ SetVariable( "pose", "sassy")]
add character_img:
pos (-60,81)
- character_script.rpy
init python:
def draw_character(st, at):
return LiveComposite(
(670, 670),
(0, 0), "character/"+ race +"/bodies/"+ skintone +"/medium/poses/%s.png"%pose ,
(0, 0), "character/"+ race +"/bodies/"+ skintone +"/scarsfreckles/"+ pose +"/%s.png"%freckles ,
(0, 0), "character/"+ race +"/bodies/"+ skintone +"/blush/"+ pose +"/%s.png"%blush ,
(0, 0), "character/"+ race +"/bodies/"+ skintone +"/faces/"+ eyecolor +"/"+ pose +"/%s.png"%mood ,
(0, 0), "character/"+ race +"/hairstyles/"+ pose +"/"+ haircolor +"/%s.png"%underhair ,
(0, 0), "character/earrings/"+ pose +"/%s.png"%earrings ,
(0, 0), "character/clothes/medium/"+ pose +"/%s.png"%outfit ,
(0, 0), "character/"+ race +"/hairstyles/"+ pose +"/"+ haircolor +"/%s.png"%overhair ,
),.1
init:
image character = DynamicDisplayable(draw_character)
- character_settings.rpy
init:
## ВНЕШНИЙ ВИД ПЕРСОНАЖА ##
$ race = "human"
$ body = "medium"
$ skintone = "skin1"
$ pose = "angry"
$ underhair = "bobcut"
$ haircolor = "brown"
$ freckles = "no_freckles"
$ mood = "smiling"
$ eyecolor ="green"
$ outfit ="startermelee"
$ overhair ="blank"
$ hairstyle = "bobcut"
$ blush = "none"
$ earrings = "none"
- script.rpy
image white = "#ffffff"
image chara_set_img = "tutorial_files/character_settings.png"
image live_composite_img = "tutorial_files/live_composite.png"
image folder_ex1 = "tutorial_files/folder_ex1.png"
image folder_ex2 = "tutorial_files/folder_ex2.png"
# Объявите персонажей, используемых в игре.
define r = Character('Ринмару', color="#c8ffc8")
define d = Character('Даммили', color="#e97676")
# Игра начинается здесь.
label start:
scene white
r "Всем привет!"
r "Это очень запутанный урок по кастомизации персонажа."
r "Я знаю, что, вероятно, есть способы и получше, но я смогла найти только этот полезный способ, так что не стесняйтесь исправлять меня, где я ошибаюсь."
r "Это пошаговое руководство для начинающих, так что если вы уже продвинулась в кодирование на Ren'py не стесняйтесь проверять файлы .rpy."
r "Предупреждение: в рамках данного метода вам придется загрузить множество изображений во много различных папок. Это реально скучно."
r "В любом случае мы начинаем!"
r "Для начала представим основного персонажа и назовем её 'Даммили'."
show character with dissolve:
pos (-60,81)
d "Привет!"
r "Даммили здесь состоит из 8-ми частей."
r "Поза (или основа)."
r "Веснушки или шрамы."
r "Румяна и эффекты."
r "Эмоции на лице."
r "Прически, которые появляются под костюмами (underhair)."
r "Серьги."
r "Костюмы."
r "Прически, которые появляются над костюмами (overhair)."
hide character with dissolve
r "Первое, что вы захотите сделать – создать переменную для каждой части, которую вы собираетесь настроить в своем персонаже."
r "Откройте новый скрипт Ren'py и создайте блок init."
r "Затем начните добавлять ваши переменные."
r "Если вам нужен пример, проверьте character_settings.rpy в файле руководства."
show chara_set_img at top with dissolve
r "Это выглядит примерно так."
hide chara_set_img with dissolve
r "Следующая часть – собрать персонажа по частям."
r "Немного изобразим доктора Франкенштейна."
$ mood = "wtf"
show character with dissolve:
pos (-60,81)
r "ОНО ЖИВОЕ!!!"
d "Ха-ха..."
r "Прости..."
hide character with dissolve
r "Чтобы собрать своего персонажа по частям, достаточно создать live composite изображение."
r "Для этого Renpy предоставляет вам все необходимые инструменты."
r "Вот самая сложная часть."
show live_composite_img at top with dissolve
r "Вам нужно назвать документы для ваших 'частей' точно так же, как и добавленные переменные."
r "Например:"
show chara_set_img at topleft with dissolve
show live_composite_img at topright with dissolve
r "В настоящее время раса (race) нашего персонажа – 'человек' (human), её оттенок кожи (skintone) – skin1, телосложение (body) – medium (вы можете добавить переменную для этого тоже. В данном уроке у меня только одно телосложение) и поза (pose) – 'angry'."
r "Это означает, что live composite в настоящее время использует изображение позы тела 'angry' из папки medium, находящейся в папке skin1, расположенной в папке bodies, которая, в свою очередь, находится в папке human."
r "Я говорила, что будет довольно запутанно..."
r "Проверьте папку 'character' данного руководства, чтобы увидеть, как в ней много вложенных папок."
r "Это вообще-то намного проще, когда рисунки выполнены в аниме стиле."
r "Для эмоций на лице необходимо создать отдельные папки в количестве цветов кожи только для того, чтобы получить правильные эмоции с правильным цветом кожи."
hide chara_set_img with dissolve
hide live_composite_img with dissolve
r "Например:"
r "Давайте изменим цвет кожи с помощью переменной $ skintone = 'skin2'."
$ skintone = "skin2"
show character with dissolve:
pos (-60,81)
r "Та-дам!"
r "Но для того, чтобы изменить цвет кожи, необходимо загрузить все эмоции на лице, каждую позу и румяна в отдельные папки со цветом кожи."
r "И каждый раз, когда требуется добавить еще одну эмоцию, вам предстоит загрузить их для каждой расы, каждой позы, каждого цвета глаз и каждого цвета кожи."
r "Предстоит проделать большую работу, но результат приятный."
r "Так или иначе, вернемся к уроку."
hide character with dissolve
show folder_ex1 at top with dissolve
r "В папке урока название другой позы - 'sassy'."
r "Давайте изменим имя переменной с помощью '$ pose = 'sassy''"
hide folder_ex1 with dissolve
$ pose = "sassy"
r "Теперь посмотрим, как это сработает."
show character with dissolve:
pos (-60,81)
r "Привет, Даммили."
r "У неё по-прежнему ранее установленный цвет кожи и первоначальная поза изменена на новую."
r "Когда вы меняете позы, вы также должны убедиться, что у вас есть правильный наряд в соответствующей папке с позами."
r "Также правильное настроение в соответствующей папке с позами."
hide character with dissolve
show folder_ex2 at top with dissolve
r "Приведу пример."
r "Тот же метод используется при смене рас. Поскольку другая раса может иметь различные характеристики тела, вам, вероятно, придётся или не придётся самостоятельно загрузить все изображения по отдельности для этих функций."
r "Например: цвет кожи и глаз расы лунных эльфов отличается от человеческого. Так что эмоции на лице необходимо перекрасить и загрузить соответствующим образом."
hide folder_ex2 with dissolve
$ race = "moonelf"
$ pose = "angry"
$ mood = "smiling"
show character with dissolve:
pos (-60,81)
d "Теперь я лунный эльф."
r "Самой сложной частью данного метода является процесс загрузки."
r "Но результат действительно принесет вам радость."
r "Даммили, как ты себя чувствуешь?"
hide character with dissolve
$ mood = "mad"
$ pose = "sassy"
show character with dissolve:
pos (-60,81)
d "Как ты думаешь?"
r "Что? Тебе не нравится твой новый образ?"
$ mood = "sigh"
d "Нет, ты просто мне не нравишься."
r "Отлично, я ухожу..."
hide character with dissolve
$ mood = "eh"
$ pose = "angry"
show character with dissolve:
pos (-60,81)
d "Подожди! Ты что, так меня и оставишь?"
r "Нет. Я позволю кому-нибудь другому решить твою судьбу, ты, неблагодарная мале-"
$ mood = "mad"
d "Продолжай..."
r "Н-ничего..."
r "Далее будет представлен небольшой экран для кастомизации персонажа, который поможет вам настроить внешний вид Даммили."
r "Вы можете изменять, редактировать, модифицировать данный урок любым удобным вам способом."
r "Если вы действительно собираешься использовать данный урок для создания системы кастомизации персонажа, выражаю соболезнования и удачи!"
r "Постскриптум: пожалуйста, не используйте изображения из этого урока ;_;."
$ mood = "out"
d "Блаблабла... Просто уходи."
hide character with dissolve
$ mood = "smiling"
$ race = "human"
$ skintone = "skin1"
show screen character_customization_screen
pause
return
Источник[править | править код]
Статья "Messy character customization tutorial" на английском языке.
На главную страницу | Книга рецептов Энциклопедии Ren'Py | Форумы Lemma Soft | Вернуться к началу статьи |