[renpy] 팬게임을 만들어보자! (3- 개발 편)
2021.09.01 - [전체보기] - [renpy] 팬게임을 만들어보자! (2- 그림 편)
2021.09.01 - [컴퓨터/renpy] - [renpy] 팬게임을 만들어보자! (1- 스토리 편)
사실 이번 팬게임이 렌파이 첫작이다...... 그래서 노베이스에서 맨땅 헤딩했던 경험을 적어보고자 한다.
Q. 왜 유니티 안쓰고 렌파이를 썼는가?
중간에 gg치지 않고 끝까지 뭐가 됐든 만들기 위해 상대적으로 쉬운 렌파이를 선택했다
렌파이 정보가 너무너무 부족해서 유튜브 강의를 참고했다
https://youtube.com/playlist?list=PLctzObGsrjfwDuAVF_R1Q75JGojEcqj-h
참고로 이분 유니티 책도 엄청 괜찮음!
https://youtube.com/playlist?list=PLJgbnTkC4bkCj2_8ZUg1o4CafLcRH0rAX
http://baekansi.dothome.co.kr/doc/html/index.html
https://askance.tistory.com/156
이 분 블로그에서 엄청 도움받았음!! 감사합니당
개발하면서 신경썼던 부분 정리
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] 폴더 내의 이미지를 등록하는 법
8. 엔딩크레딧
게임 끝에 나오는 엔딩크레딧이다
https://lemmasoft.renai.us/forums/viewtopic.php?f=51&t=22481
이 코드를 기반으로 만들었다
'컴퓨터 > renpy' 카테고리의 다른 글
[renpy] 윈도우 아이콘 바꾸는 방법 (0) | 2022.11.15 |
---|---|
[renpy] 팬게임을 만들어보자! (2- 그림 편) (0) | 2021.09.01 |
[renpy] 팬게임을 만들어보자! (1- 스토리 편) (0) | 2021.09.01 |
[renpy] 폴더 내의 이미지를 등록하는 법 (0) | 2021.02.25 |