간단한 노벨 게임 개발을 해보자! 💖두근두근 Ren'py 세계(1)💖

쏘이·2023년 8월 13일
0
post-thumbnail

개발계 학습 디코에서 만나게 된 인연 덕분에 배우게 된 렌파이!
게임개발은 해본 경험이 없기도했고 활용성이 높아보여 시작하게 되었다
오늘은 렌파이가 무엇인지, 그리고 렌파이 시작부터 기초 문법까지 내가 시작한 과정을 같이 밟아나가보려한다 (feat. 예상치 못한 우여곡절)



❤️ Ren'py란?

렌파이는 파이썬 기반 의 게임 개발 툴이다
흔히 알고 있는 '두근두근 문예부'가 이 엔진의 대표작(?)이라고 할 수 있겠는데,
우리가 비주얼 노벨 게임을 아주 쉽게 만들 수 있다고 한다 (물론 심연으로 가게되면 파이썬을 해야한다 나도 이번 기회에 파볼 예정)

문예부사진

장점은 꽤나 많은 것 같은데 3가지만 꼽자면

  1. 노베이스가 해도 될만큼 쉽다!

  2. All free! 심지어 만들어서 판매도 된다고 한다

  3. 배포가 매우매우 간단하다
    아래 사진에서 원하는 플랫폼을 선택하고 프로그램 다운만 받으면 바로
    배포가 가능하다;;





🧡 Install

다운로드 페이지에서 본인의 OS에 맞게 설치해준다



주의⚠️ - 설치파일경로에 한글은 금물!

다운 후 길라잡이조차 실행이 되지 않아서 조상님이 경광봉 흔드시나 했는데^^
갑자기 저번 플젝 프론트 - 백 연동할때 자바 환경변수 설정 때문에 고생했던 기억이 떠오르면서 'Hoxy,, 내 로컬계정 이름이 한글이라서,,?' 하는 생각이 들었다
구글링하면서도 경로에 '바탕 화면'등의 한글 경로가 있으면 에러로 실행이 되지 않을 수도 있다고 해서 변경을 시도해봤지만 여기서도 어려움을 겪었다 ㅎㅎㅎ
렌파이 입문자에게 충분히 있을 수 있는 일이라 생각해 도움이 되었으면 해서 작성해본다


계정명이 한글일 때
  1. 로컬(메인계정)이 아닐 경우
    로컬 계정명을 영어로 변경해준 뒤 다시 설치를 시도한다
    리라 Blog - 사용자 이름 영어로 바꾸는 법

  2. 로컬일 경우
    메인계정을 함부로 바꾸게 되면 문제가 생길수도 있다고 하니,
    영문으로 새 계정을 생성해서 설치한다
    Ian Paul - “MS 계정 없이” 윈도우 10 로컬 계정 만들기

나는 1번을 시도하다가 결국 2번으로 해결했는데 애초에 다음부터 로컬을 영문으로 생성해야겠다는걸 뼈저리게 느꼈다,,,,,





💛 프로젝트 생성 및 시작

길라잡이

길라잡이에서 프로젝트 실행을 하면 게임을 만들기 위한 거의 모든 정보를 담은 튜토리얼이 진행된다



프로젝트 생성

새 프로젝트 만들기를 누르고

프로젝트 이름을 지정하면 따로 install이나 create할 필요없이 프로젝트가 생성된다



왼쪽에서 프로젝트를 생성하고 실행하면 세팅되어있는 스크립트가 실행되고 프로젝트 열기를 하면 코드 파일이 열리게 된다 그 중에서도 중심인 script.rpy에서 친절한 주석 설명을 따라 개발하면 된다!





💚 기초 문법

최초 생성 파일을 보며 같이 살펴보겠다

script.rpy

# 이 파일에 게임 스크립트를 입력합니다.

# image 문을 사용해 이미지를 정의합니다.
image irene happy = "irene_happy.png"

# 게임에서 사용할 캐릭터를 정의합니다.
define irene = Character('아이린', color="#c8ffc8")


# 여기에서부터 게임이 시작합니다.
label start:

    irene "새로운 렌파이 게임을 만들었군요."

    irene "이야기와 그림, 음악을 더하면 여러분의 게임을 세상에 배포할 수 있어요!"

    return


1. label

label은 스크립트의 시작을 알린다
한 파일에 또는 여러 파일에 각기 다른 label을 생성해 추후 살펴볼 jump로 스크립트를 이동할 수 있다

최초 생성된 script.rpy에서 볼 수 있는 start label은 특수한 레이블이다
시작하기를 눌렀을때 처음으로 실행되는 부분이니 함부로 바꾸지 않도록 유의하자!



2. character

대사를 작성하려면 해당하는 캐릭터가 존재해야한다 (나레이션 제외)

define irene = Character('아이린', color="#c8ffc8")

주의⚠️ - 파이썬이나 렌파이에 이미 주어진 클래스 이름(캐릭터 이름 변수 “im” 등)으로 정하면 실행오류가 난다

define im = Charactor("이름", color=색상아무거나)
# 이럴 경우 에러가 발생하는데, 렌파이의 이미지 관련 객체인 'im'과 이름이 중복되기 때문이다.
# im.FactorScale() <- 이런 걸로 이미지 크기를 조정할 수 있음.

AttributeError: ADVCharacter object ~ 에러가 계속 발생한다면 이미 언어내에 정의된 클래스가 있는지 고려해봐야한다!



3. say

say문은 크게 나레이션과 캐릭터가 있는 대사로 나뉜다
위의 예제에서 정의한 아이린(irene)를 사용해보겠다

정의 방법

"나레이션"
irene "대사"

""" """를 통해 여러줄을 동시에 작성할 수도 있다

"""
나레이션1

나레이션2

나레이션3
"""

irene """
대사1
    
대사2
    
대사3
"""


4. img

이미지 부분은 정독한 뒤에 필요한 방식을 선택하시는걸 추천드립니다

img define


1) show / hide ver.


기본적으로 images 파일 내부에 `캐릭터 표정.png`로 저장하는것이 좋다 캐릭터의 여러 표정을 보여주기 위해선 어쩌고

단일 사진일 경우

image sylvie = "sylvie.png"

여러표정(추천)

image sylvie default = "sylvie_default.png"
image sylvie smile = "sylvie_smile.png"
image sylvie surprised = "sylvie_surprised.png"

But!!! 사실 정의하지 않아도 괜찮다(?)
밑의 image side 방식이 아니라면 파일명을 캐릭터 표정.png으로 저장하고 그냥 가져다 쓰기만 하면 된다
아래의 예시로 함께 살펴보자

define irene = Character('아이린', color="#c8ffc8")
define sylvie = Character('실비', color="#c8ffc8")


label start:
    "즐거운 렌파이 세계에 온 걸 환영해!"
    
    """
    여러줄을 쓰고 싶을 땐 이렇게,
    
    이렇게도 가능하다구!
    """
    
    show 아이린 neutral
    여자 "하루만에 가능하다고?"
    hide 아이린
    
    show 실비 neutral
    남자 "당연한거 아니냐~"
    hide 실비
    
    show 아이린 smile
    여자 "말도 안돼!"
    hide 아이린
    
    return # 이 코드가 실행되면 게임 끝남

저장된 파일명으로 사진을 show / hide 하고 있다



그러나 매번 show hide 하기엔 번거로움이 있는데, 이럴땐 캐릭터정의에서 태그를 지정해주는 방법이 있다!

2) show hide x ver.

define 아이린 = Character('아이린', color="#c8ffc8", image="여자") # 캐릭터 정의할 때 이미지 태그도 같이 정의
define 실비 = Character('실비', color="#c8ffc8", image="실비")

image side 아이린 neutral = "images/아이린 neutral.png"
image side 아이린 smile = "images/아이린 smile.png"
image side 실비 neutral = "images/실비 neutral.png"


캐릭터를 정의할때 이미지 태그도 같이 정의해주면
해당 이름을 가지고 있는 이미지들이 캐릭터에 묶이게 된다
즉, show / hide를 사용하지 않고 캐릭터명(+ 표정)만 명시해주면 자연스레 이미지는 따라 들어오게 된다

label start:
    """
    렌파이 고수가 되어보자! 가능하다고?
    
    Yeah for Sure! In a day! In a minute!
    
    모두 렌파이 해볼래?
    """
    
    아이린 neutral "하루만에 가능하다고?"
    
    실비 neutral "당연한거 아니냐~"
    
    아이린 smile "말도 안돼!"
    
    return # 이 코드가 실행되면 게임 끝남

보다싶이 show / hide를 전혀 사용하지 않고 이미지를 불러오는 모습이다





position

at을 사용해 이미지의 위치를 조정할 수 있다

show 캐릭터 at left

show 캐릭터 at center

show 캐릭터 at right

으로 간단히 위치를 나타낼 수 있다


++ 변형 및 속성

show cat default :
    zoom 1.5
cat "나는 아이엠"

크기, 밝기, 위치 등 간단한 속성을 지정할 수 있다

더 다양한 속성을 부여하고 싶다면 transform을 사용하는걸 추천!



effect

이미지에 효과를 부여하고 싶다면 with를 사용하자

show cat default at left with dissolve 
"나는 아이엠"
hide cat with dissolve
"잘가"

좀 더 자세한 예제는 여기서 확인할 수 있다
https://www.notion.so/Step-2-9c0ea369e60042d19beff6470bb880c1





5. 선택지와 이동

labelmenu, jump를 이해하면 선택지와 이동을 손쉽게 할 수 있다

label first_chioces:
        cat "그럼 이야기를 시작해볼까?"
        menu:
            "응":
                jump yy   
            "아니?":
                jump nn

    
label yy:
    cat "좋아!"
    jump last
       
label nn:
    cat "다시 생각해봐"
    jump last
        
label last:
    show cat default at followCursor 
    cat "이제 시작해보자"
    

jump layeredimage_test


1) 기준점

label은 기준점 정도로 생각하면 좋을 듯 하다
label을 한 파트로 하여 선택지와 에피소드를 이동할 수 있다



2) 이동

menu라는 분기점에서 jump로 넘어갈 label을 지정하면 사용자가 선택하는 것에 따라 이동하도록 지정할 수 있다

위의 기본형 말고 선택지에서 대사를 바로 뱉도록 만들수도 있다
(들여쓰기에 주의!)

label choices:
	여자 "너 나 좋아하지?"

menu:
	"응":
		여자 "어머!"
	"아니?":
		여자 "거짓말..."




참고자료


포스트작성에 많은 도움이 되었습니다👍

Renpy 튜토리얼

렌파이 공식 홈페이지 - 렌파이 메뉴얼

profile
JUST KEEP GOING

0개의 댓글