본문 바로가기
programming/renpy

[renpy 강좌 01 ] 설치 및 기초 문법

by FAPER 2024. 5. 8.


Ren'Py는 주로 비주얼 노벨 및 스토리 기반 게임을 제작하는 데 사용되는 인기 있는 게임 엔진이다. 이 엔진은 Python 프로그래밍 언어에 기반을 두고 있으며, 그 이름도 Python과 'Ren'ai' (연애 시뮬레이션 게임의 일본어)의 조합에서 유래되었다. Ren'Py는 쉬운 스크립트 구조와 강력한 기능 덕분에 초보자부터 전문 개발자까지 널리 사용되고 있다.

다운로드

https://www.renpy.org/latest.html

 

Ren'Py 8.2.1

Android and iOS Support When building Android packages, iOS packages, or web distributions, Ren'Py will prompt you to download RAPT (Ren'Py Android Packaging Tool), Renios (Ren'Py iOS Support), or Renpyweb (Web Platform Support). As these downloads may fai

www.renpy.org

여기서 다운로드 받으면 된다.

 

 

설치가 완료되면 이렇게 예시 프로젝트를 만들어서 이것저것 세팅해 볼 수 있다.

 

 

프로젝트의 구조는 다음과 같다. 

주로 사용하게 되는 것은 script.rpy이다. 

 

여기엔 *.rpy라고 하는 전용 언어가 있는데, 파이썬 기반으로 만들어진 렌파이용 스크립트 언어라고 보면 된다. 여기서 파이썬 코드도 실행 할 수 있다. 

이걸 이용해서 비주얼 노벨 게임을 만들 수 있다.

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

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

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


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

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

    e "이야기와 그림, 음악을 더하면 여러분의 게임을 세상에 배포할 수 있어요!"
    e  "어디로 이동할까요?"
    menu:
        "1. 카페로 가자":
            e "카페 나도 좋아해요"

        "2. 공원으로 가자":
            e "다리 아픈데"

    return

 

여기엔 먼저 label이라는 키워드가 있는데, 절차 지향 언어에서 함수라고 보면 된다. 모든 함수는 main()에서 시작하듯, 여기도 label start: 가 가장 먼저 읽힌다. 

 

모든 미연시가 그렇듯 스토리 진행 -> 특정 조건 달성 -> 굿엔딩/배드엔딩 이렇게 결정되는 흐름이 있다.

 

전체적인 흐름은 위와 같으며, 단순 선택 외에도 키워드 입력이나 포인트 앤 클릭 방식으로 다양한 입력을 받을 수 있다. 

 

이런식으로 menu 키워드를 쓰게 되면 선택지를 주고 분기를 나눌 수 있다.

 

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

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

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


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

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

    e "이야기와 그림, 음악을 더하면 여러분의 게임을 세상에 배포할 수 있어요!"
    e  "어디로 이동할까요?"
    menu:
        "1. 카페로 가자":
            e "카페 나도 좋아해요"
            jump cafe

        "2. 공원으로 가자":
            e "다리 아픈데"
            jump park


    label cafe:
        e "카페다!"
        jump airin
    
    label park:
        e "공원이다!"
        jump airin


    label airin:
        e "그래서 이제 뭐할까요?"

    return

 

그리고 jump 문이 있는데, jump는 특정 label로 흐름을 이동시키는 구문이다.

즉 함수를 호출하는 부분과 비슷하다고 보면 된다.

 

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

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

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

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

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

    e "이야기와 그림, 음악을 더하면 여러분의 게임을 세상에 배포할 수 있어요!"
    e  "어디로 이동할까요?"
    menu:
        "1. 카페로 가자":
            e "카페 나도 좋아해요"
            jump cafe

        "2. 공원으로 가자":
            e "다리 아픈데"
            jump park


    label cafe:
        e "카페다!"
        $book = True
        jump airin
    
    label park:
        e "공원이다!"
        jump airin


    label airin:
        e "그래서 이제 뭐할까요?"
        if book:
            e "책을 읽을까요?"
    return

 

그리고 기초적인 변수를 제공한다.

$ 변수명 으로 사용 가능하며 default로 선언 할 수 있다. 

간단한 flag를 설정할 때 유용하다.