Урок по кастомизации персонажа (Messy character customization tutorial)

Материал из Ren'Py Wiki
Перейти к навигации Перейти к поиску
Messy character customization tutorial.png

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

Архив с проектом вы можете скачать здесь.

Ниже представлены коды, используемые в проекте:

  • 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 Вернуться к началу статьи