[renpy] 팬게임을 만들어보자! (3- 개발 편)

2021. 9. 1. 21:34

2021.09.01 - [전체보기] - [renpy] 팬게임을 만들어보자! (2- 그림 편)

 

[renpy] 팬게임을 만들어보자! (2- 그림 편)

2021.09.01 - [컴퓨터/renpy] - [renpy] 팬게임을 만들어보자! (1- 스토리 편) [renpy] 팬게임을 만들어보자! (1- 스토리 편) *제작 시기: 2021년 2월 말 (개강 직전) 제작 당시와 시간이 조금 차이나기 때문에 틀

kumonoueno.tistory.com

2021.09.01 - [컴퓨터/renpy] - [renpy] 팬게임을 만들어보자! (1- 스토리 편)

 

[renpy] 팬게임을 만들어보자! (1- 스토리 편)

*제작 시기: 2021년 2월 말 (개강 직전) 제작 당시와 시간이 조금 차이나기 때문에 틀린 내용이 있을 수도 있습니다 코드: github 완성본(웹 버전, 다운로드는 어과형 팬카페에서): 여기 나는 <어린이

kumonoueno.tistory.com

사실 이번 팬게임이 렌파이 첫작이다...... 그래서 노베이스에서 맨땅 헤딩했던 경험을 적어보고자 한다.

 

Q. 왜 유니티 안쓰고 렌파이를 썼는가?

중간에 gg치지 않고 끝까지 뭐가 됐든 만들기 위해 상대적으로 쉬운 렌파이를 선택했다

 

렌파이 정보가 너무너무 부족해서 유튜브 강의를 참고했다

https://youtube.com/playlist?list=PLctzObGsrjfwDuAVF_R1Q75JGojEcqj-h 

 

렌파이 RenPy - 비주얼 노벨 개발

렌파이의 98%를 전부 다룹니다

www.youtube.com

참고로 이분 유니티 책도 엄청 괜찮음!

 

https://youtube.com/playlist?list=PLJgbnTkC4bkCj2_8ZUg1o4CafLcRH0rAX 

 

Renpy Tutorials

 

www.youtube.com

 

http://baekansi.dothome.co.kr/doc/html/index.html

 

렌파이 매뉴얼 페이지입니다

렌파이 매뉴얼 페이지입니다 현재 렌파이 문서를 다시 작성하고 있습니다. 이 문서는 가장 최신버전의 문서이지만 아직 불완전합니다. 렌파이에 관한 더 많은 정보를 찾으신다면 렌파이 홈페이

baekansi.dothome.co.kr

https://askance.tistory.com/156

 

아날로그 어 헤이트 스토리 따라하기 - 4 메인 메뉴

범위 체험판(..) 의 메인 메뉴를 따라 만들어봤습니다. 준비자료 메인 메뉴 꾸밀 이미지들입니다. 아이콘/버튼/배경은 게임 캡쳐 따서(..) 만들었고, 로고는 일부러 다르게 만들었습니다. 그림 파

askance.tistory.com

이 분 블로그에서 엄청 도움받았음!! 감사합니당

 

 

 

개발하면서 신경썼던 부분 정리

 

1. 타이틀에 버튼 배치, hover 하면 색 바뀌기

screen main_menu():

    ## This ensures that any other menu screen is replaced.
    tag menu

    style_prefix "main_menu"

    add gui.main_menu_background

    imagebutton idle 'gui/startbtn.png' hover 'gui/startbtn_hover.png' action Start() xpos 100 ypos 620
    imagebutton idle 'gui/loadbtn.png' hover 'gui/loadbtn_hover.png' action ShowMenu("load") xpos 335 ypos 620
    imagebutton idle 'gui/prefbtn.png' hover 'gui/prefbtn_hover.png' action ShowMenu("preferences") xpos 562 ypos 620
    imagebutton idle 'gui/morebtn.png' hover 'gui/morebtn_hover.png' action ShowMenu("about") xpos 793 ypos 620
    if renpy.variant("pc"):
            ## The quit button is banned on iOS and unnecessary on Android and
            ## Web.
            imagebutton idle 'gui/quitbtn.png' hover 'gui/quitbtn_hover.png'  action Quit(confirm=not main_menu) xpos 1000 ypos 620

    ## This empty frame darkens the main menu.
    frame:
        pass

기존은 textbutton 으로 되어 있는데 이것을 이미지로 대체한다

quit 버튼은 pc에서만 나오기 때문에 웹 버전에서는 나오지 않는다.

 

 

2. history 빼기

 

이벤트 cg는 직접 스크립트를 이용하는 것이 아니라 그림 안에 문자가 있기 때문에 (산돌 폰트를 쓸 수 없기 때문에) history를 쓰면 일부 구간이 날아가는 문제가 생긴다. 중요한 기능도 아니었고 긴 게임도 아니라서 삭제하기로 했다

screen quick_menu():

    ## Ensure this appears on top of other screens.
    zorder 100

    if quick_menu:

        hbox:
            style_prefix "quick"

            xalign 0.5
            yalign 1.0

            textbutton _("되감기") action Rollback()
            textbutton _("넘기기") action Skip() alternate Skip(fast=True, confirm=True)
            textbutton _("자동진행") action Preference("auto-forward", "toggle")
            textbutton _("저장하기") action ShowMenu('save')
            textbutton _("Q.저장하기") action QuickSave()
            textbutton _("Q.불러오기") action QuickLoad()
            textbutton _("설정") action ShowMenu('preferences')

screens.rpy의 quick_menu()와 navigation()에서 history를 삭제한다.

screen navigation():

    vbox:
        style_prefix "navigation"

        xpos gui.navigation_xpos
        yalign 0.5

        spacing gui.navigation_spacing


        
        textbutton _("저장하기") action ShowMenu("save")

        textbutton _("불러오기") action ShowMenu("load")

        textbutton _("환경설정") action ShowMenu("preferences")

        if _in_replay:

            textbutton _("리플레이 끝내기") action EndReplay(confirm=True)

        elif not main_menu:

            textbutton _("메인 메뉴") action MainMenu()

        textbutton _("더보기") action ShowMenu("about")

        if renpy.variant("pc") or (renpy.variant("web") and not renpy.variant("mobile")):

            ## 도움말 메뉴는 모바일 디바이스와 맞지 않아 불필요합니다.
           # textbutton _("조작방법") action ShowMenu("help")
           pass

        if renpy.variant("pc"):

            ## The quit button is banned on iOS and unnecessary on Android and
            ## Web.
            textbutton _("종료하기") action Quit(confirm=not main_menu)

3. 이벤트 cg 만화

이런식으로 클릭하면 다음 컷이 재생되도록 했다

한 컷 사이즈를 화면 사이즈에 맞춰서 show 만으로 구현할 수 있도록 했다.

이런식으로..!

    scene bg_white
    show bg_start_1 with dissolve

    pause

    show bg_start_2 with dissolve
    
    pause

    show bg_start_3 with dissolve

    pause

    show bg_start_4 with dissolve
    
    pause
    
    show bg_start_5 with dissolve
    
    pause

 

 

4. hover 되는 책, 캐릭터

ppt에 마우스를 올리면 ppt 주변이 주황색으로 변한다

screen ppt_imagemap():
        imagemap:
            auto "ppt_%s.png"
            text "마리가 밤 새워 만든 PPT를 클릭해보자!":
                size 35
                yalign 0.9 xalign 0.45

            hotspot(129,174,298,164) action  Return("ppt") 
            hotspot(552,158,457,398) action Return("mary")

좌표는 개발자모드로 확인할 수 있다

label ppt:
    call screen ppt_imagemap
    if _return == 'ppt':
        play sound"audio/pong.mp3" volume 0.5
        hide ma
        jump ppt2

    else:
        play sound"audio/pat.mp3" volume 0.5
        ch_ma "아이참, 나 말고 PPT를 클릭해 봐!"
        ch_cha "맞아맞아"
        $c_num+=1
        if c_num>5:
            play sound"audio/piano.mp3"
            ch_ma "왜 나를 그렇게 많이 눌렀어?"
        jump ppt

마리를 5번 이상 누르면 밑과 같은 이스터에그가 뜬다

 

return이 ppt아니면 mary이기 때문에 if-else로 해결할 수 있다.

 

hover하면 주변에 표시가 된다

screen news_imagemap():
        imagemap:
            auto "news_%s.png"
            
            hotspot(173,59,637,605) action Return("news")

news_ground, news_hover인데 auto를 사용하여 자동으로 선택하도록 할 수 있다

hide shin 
call screen news_imagemap

5. 캐릭터 하반신을 덜그렸다..??

처음부터 덜 그린 것은 아니고(당연) 사이즈 조절하는 과정에서 위로 어느정도 띄워야하는 일이 생겼다

 

텍스트 박스가 불투명이라 크게 상관은 없는데 화면 전환하는 과정에서 덜 그린게 보이는 경우가 있어서

 show bg_start2_4 with dissolve

로 깔끔하게 전환되는 방식을 사용했다

 

6. 선택지

renpy는 기본 기능으로 선택지를 제공한다

    menu:
        "좋아":
            pass
        "정말 좋아":
            pass
    play sound"audio/pong.mp3" volume 0.5
    show ma happy
    ch_ma "좋지? 그럴 줄 알았어."
    ch_ma "정말 흥미로운 주제라고 생각했다고!"

이런식으로 뭐든 결론이 같은 선택지를 만들기도 했고, 

 

 "다음 중 가장 그럴듯한 가설은 무엇일까?"
    menu:
        "한마리":
            play sound"audio/pong.mp3" volume 0.5
            show ma special3
            ch_ma "음... 난 내 추리가 가장 그럴듯 하다고 생각해."
            hide ma
            show tae serious
            ch_tae "그게... 과학적으로 타당한 가설이야?"
            hide tae
            show ma default
            ch_ma "하긴. 그건 그렇지."
            hide ma
        "고차원":
            play sound"audio/pong.mp3" volume 0.5
            show ma special4
            ch_ma "음... 난 차원이의 추리가 가장 그럴듯 하다고 생각해."
            hide ma
            show cha surprised
            ch_cha "그런데 그러려면 모자만 두는 방이 따로 있어야겠다."
            ch_cha "모자 200개... 너무 많아."
            hide cha
        "강태산":
            play sound"audio/pong.mp3" volume 0.5
            show ma special5
            ch_ma "음... 난 태산이의 추리가 가장 그럴듯 하다고 생각해."
            hide ma
            show tae default
            ch_tae "그래? 그런 게 있다면 나도 갖고 싶다."
            ch_tae "깨끗해지는 모자를 응용한다면 깨끗해지는 옷도 만들 수 있겠어."
            hide tae
        "은하수":
            play sound"audio/pong.mp3" volume 0.5
            show ma special6
            ch_ma "음... 난 하수의 추리가 가장 그럴듯 하다고 생각해."
            hide ma
            show ha surprised
            ch_ha "그런데, 다른 게임 캐릭터도 비슷한 논쟁이 있었는데"
            ch_ha "결국엔 평범한 머리였어."
            show ha default
            ch_ha "신형사님도 엄청 특이한 머리는 아닐 거야."
            hide ha

선택지마다 다르게 그림이 나오도록 하기도 했다

 

7. 폴더 통째로 등록

2021.02.25 - [컴퓨터/renpy] - [renpy] 폴더 내의 이미지를 등록하는 법

 

[renpy] 폴더 내의 이미지를 등록하는 법

원래 그렇게 안많을줄 알고 일일히 renpy 코드로 쓰려고 했으ㄴㅏ.... 그건 나의 오산이었다 lemmasoft.renai.us/forums/viewtopic.php?t=27114 How do I use the Defining Automatic Images Code? - Lemma Soft F..

kumonoueno.tistory.com

8. 엔딩크레딧

 

 

게임 끝에 나오는 엔딩크레딧이다

https://lemmasoft.renai.us/forums/viewtopic.php?f=51&t=22481 

 

Scrolling Credits - Lemma Soft Forums

A place for Ren'Py tutorials and reusable Ren'Py code. Forum rules Do not post questions here! This forum is for example code you want to show other people. Ren'Py questions should be asked in the Ren'Py Questions and Announcements forum. leon Miko-Class V

lemmasoft.renai.us

이 코드를 기반으로 만들었다

BELATED ARTICLES

more