본문 바로가기

렌파이

텍스트 어드벤처 만들기 (2) 선택지와 분기 만들기 선택지 만들기menu 문선택지를 만들 때는 menu: 를 사용하면 됩니다. menu 명령문 다음 줄에는 선택지로 표시할 문장을 입력하고, 그 문장에 콜론을 입력해서 다음 줄에 내용을 적으면, 그 선택지가 선택되었을 때 취할 행동을 결정할 수 있습니다. init: define b = Character("백안시") label start: b "어떤 음악을 들을까." menu: "푸 파이터즈의 디즈 데이즈": "One of these days, the ground will drop out from beneath your feet." "One of these days, your heart will stop and play it's final beat." "래드윔프스의 덕아웃": "母の腹を裂いてまで 出てきたこの娑.. 더보기
텍스트 어드벤처 만들기 (1) 대사 입력하기 대사 입력하기 한글 출력이 제대로 된다면 이제 렌파이로 게임을 만들어봅시다. 렌파이 런처를 실행하고 Create New Project 를 선택해 새 프로젝트를 만듭시다. 제대로 만들어졌다면 런처 윗 부분에 방금 만든 프로젝트 이름이 적히게 됩니다. 확인하시고 Edit Script 를 선택합시다. 스크립트 에디터가 실행되면 script.rpy 파일 내용을 확인할 수 있습니다. 안에 영어로 뭐라 적힌 내용은 전부 지우고 첫 줄에 다음과 같이 적습니다. label start: label start 는 게임이 시작될 부분을 가리키는 명령어 같은 것입니다. 적었다면 엔터 키를 누르고 인용부호를 써서 아무 말이나 입력해봅시다. 이 때 쓰는 인용부호는 따옴표이던 홑따옴표이던 차이는 없습니다. 물론 같은 인용부호를 써.. 더보기
비주얼 노벨 제작 툴, 렌파이 공식 홈페이지: http://www.renpy.org/ 렌파이는 파이썬/파이게임 기반으로 만들어진 비주얼 노벨 엔진으로 스토리 중심의 게임을 만드는데 유용한 툴입니다. 즉, 비주얼 노벨 외에도 텍스트 어드벤처, 육성 시뮬레이션을 만드는데 적합한 엔진이라고 할 수 있습니다. 크로스플랫폼을 지원하는 엔진으로 맥, 리눅스, 윈도우즈, 안드로이드 용으로도 배포판을 만들 수 있습니다. 또한 오픈 소스 프로그램이라 필요에 따라 직접 렌파이 자체를 수정할 수도 있습니다. 파이썬 프로그래밍 언어의 장점을 그대로 물려받아 스크립트 언어도 작성이 꽤 간단한 편이고 비주얼 노벨등에 필요한 메뉴나 세이브/로드/스크린샷/환경설정 기능을 기본으로 제공합니다. 또한 게임 화면 디자인을 자유롭게 꾸밀 수 있어 퀄리티 높은 상용게임을.. 더보기
문장 부호에 따라 텍스트창 배경 바꾸기 init python: style.say_window.background = ConditionSwitch( "exclaim == 0", "#00000050", "exclaim == 1", Frame("spiky_frame.png", 75, 75)) style.say_window.yminimum = 200 style.say_window.xpadding = 50 style.say_window.ypadding = 50 def shoutToggle(input): if input.find('!') is not -1: store.exclaim = 1 else: store.exclaim = 0 return input config.say_menu_text_filter = shoutToggle label start: $.. 더보기
스프라이트 매니저를 이용해 파티클 효과 만들기 렌파이에서 스프라이트 매니저는 파티클 이펙트라고 하는 보조 시각 효과를 만드는 데 적합한 시스템입니다. 여기서 말하는 파티클 이펙트로는 위에서 눈이 떨어진다던가 하는 익숙한 화면 효과에서부터 폭발이라던가 먼지가 이는 시각 표현 등을 예로 들 수 있습니다. 1. SnowBlossom 사실 앞서 예로 들었던 눈발이라던가 떨어지는 꽃잎같은 건 SnowBlossom 으로 간단하게 만들 수 있습니다. init: image snow = SnowBlossom("snow.png", count=100) label start: show snow '....' 이렇게 적기만 해도 게임 화면에 눈 내리는 연출을 추가할 수 있습니다. 여기에 파티클 이동 속도, 시작 방향, 갯수 등을 정하면 세로, 혹은 가로 방향에서 그 다음 방.. 더보기
아이템 구매 프메 5 생각이 나서 아이템 구매 기능을 스크린 언어로 만들어봤습니다. 아이템 사용까지 진도는 못 뺐습니다 ..^.^;; 되도록이면 기존에 있는 명령문만으로 만들어보자 했는데 아무래도 무리일듯합니다.. 파이썬을 더 배운 다음에 클래스같은 걸 써서 다시 만들어야겠네요.. 참고하실 분이 있을까 하고 킵 할겸 적어놓습니다. init python: stress = 100 init python: itemlist = [ ['영양제', 200, SetVariable('stress', stress-10), '국내 최초 발암물질 및 방사능 낙진 추출물로 만든 영양제'], ['박하스', 600, SetVariable('stress', stress-20), '커피의 100배에 육박하는 카페인 함유'], ['헉,개나무추출물'.. 더보기
값 바뀔 때마다 텍스트 색상 바꾸기 http://lemmasoft.renai.us/forums/viewtopic.php?f=8&t=10391 텍스트에 대입한 변수의 값이 증가하면 파란색 감소하면 빨간색으로 바뀌도록 한다. 도키메모 흉내낸다고 트랜스폼도 좀 추가해서.. 색이 변했다가 점차 흰 색으로 바뀌도록 하는 효과도 줌(편법으로;) - agi나 dex 라는 단어가 적힌 변수(ex ) agi, old_agi, agi_color ...)는 찾아서 필요에 따라 바꾸면 됩니다 - (별거 아니지만)스트레스처럼 올라봤자 좋을 거 없는 스탯이 증가하는 경우에 색깔이 반대로 표시되도록 함수를 추가했습니다. - 110529 init python: def delta_to_color(new, old): if new > old: return "#0ff" el.. 더보기
웹브라우저에서 작동하는 렌파이 http://lemmasoft.renai.us/forums/viewtopic.php?f=32&t=10328 는 아직 데모버전.txt 아직 개발중이라 그런 거겠지만 느립니다. 게다가 캔버스 때문인지 웹소켓때문인지 모르겠는데 IE에서는 구동이 안 됩니다. 이 상태 그대로 나온다면 차라리 스크립트를 새로 입력하는 수고를 좀 더 하더라도 스트로베리나 UC노벨을 사용하는 쪽이 좋을 듯여... 여튼 들어가서 구경해보세요. 지금은 테스트 종료해서 접속하실 수 없습니다. 어쨌든 더 빨라지지 않는 이상 제 감상은 변하지 않을듯. - 110516 더보기
선택지에 그림을 더해서 선택지의 뉘앙스 나타내기 같은 말이라고 해도 어떻게 말하느냐에 따라 그 말의 의미가 상당히 달라집니다. 그래서 플레이어는 주인공이 자기 의도와 다른 말투로 얘기하는 걸 보며 당황해하는 경우가 왕왕 있습니다. 따라서 그 선택지가 어떤 뉘앙스인지 알려준다면 오해가 발생하는 걸 막을 수 있습니다. init: $ style.say_window.yalign = 0.0 $ feel = "-" screen icon: textbutton ('%s' %feel) xalign .5 yalign 1.0 minimum (100, 100) screen choice: vbox: xanchor 1.0 xpos 350 yalign 1.0 for caption, action, chosen in items[3:]: if action: button: action.. 더보기
렌파이 6.12.1 공개 http://lemmasoft.renai.us/forums/viewtopic.php?f=8&t=10211 되었습니다. 자세한 내용은 링크를. 요약 이미지 속성 변경 - 이미지 태그가 같은 이미지끼리 교체되도록 유연하게 변경되었습니다. show eileen at right 이라고 쓰면 eileen happy 던 eileen beach angry 던 이전에 표시 중이었던 이미지 중 eileen 태그를 가진 이미지가 오른쪽으로 이동합니다. - 또한 이미지 교체와 say문 표시 명령을 한 문장으로 줄 수 있도록 바뀌었습니다. show eileen happy e "hello, world" 가 e happy "hello, world" 만으로 가능해졌습니다. - 프로필 이미지(대사창 측면에 나타나는 이미지)를 좀 더.. 더보기
이전에 골랐던 선택지를 다르게 표시하는 방법 init: $ style.menu_choice_chosen_button.background = '#123456' init: screen choice: window: style "menu_window" vbox: style "menu" for caption, action, chosen in items: if action: if not chosen: button: action action style "menu_choice_button" text caption style "menu_choice" elif chosen == True: button: action action style "menu_choice_chosen_button" text caption style "menu_choice_chosen" else.. 더보기
드래그&드롭 사용법 - 드롭 이용하기 기본: - 드래그를 끌어서 또다른 드래그에 올려놓았을 때, 그러니까 드롭했을 때(또는 되었을 때) 실행할 함수만 만들자. 그 후 드래그에 함수를 적용하면 드래그&드롭으로 인한 상호작용이 발생하게 만들 수 있다. 예제: 아래의 스크립트는 RPG게임에서의 아이템 장착창을 염두에 두고 초단순하게 만들어 본 것이다. init python: attack = 0 def hand_equipped(drop, drags): global attack attack = attack + drags[0].drag_name init: screen drop: draggroup: drag: drag_name 10 child 'sword.png' draggable True droppable False ypos .5 drag: child.. 더보기
드래그&드롭 사용법 - 드래그할 수 있는 GUI 만들기 screen say: drag: drag_name "say" yalign 1.0 drag_handle (0, 0, 1.0, 30) xalign 0.5 window id "window": # 대사창은 게임 화면보다 작아야한다 xmaximum 600 has vbox if who: text who id "who" text what id "what" 위젯을 드래그할 수 있도록 만드려면 위젯을 drag의 하위에 두어야 합니다. 네..그게 끝입니다. 그냥 창을 이리저리 움직일 수 있게만 하는 정도는 예제만 보고도 간단히 만들 수 있으니 위에서 drag_handle이라는 것만 설명하겠습니다. drag_handle (x, y, 너비, 높이) 튜플 위젯을 드래그하려면 클릭되어야 하는 부분을 가르킵니다.. 그러니까 윈도우.. 더보기
미니게임: 공 배치게임 드래그&드롭 기능이 추가되면 한번 만들어보고싶었던 미니게임입니다. 디스크 스테이션이라는 계간잡지에 수록되었던 세리리의 해피버스데이라고 아시는지. 그 게임에 있었던 미니게임인데 정확한 명칭은 딱히 모르겠습니다. 다 만들고 주석에 설명까지 달아서 설명글을 쓰려고 했더니 가끔 공 위치가 뒤죽박죽되질 않나 묘하게 불편한 점도 있고.. 근데 그걸 고치려면 어디에 손을 대야 할지 알 수가 없어서 설명은 영구 보류... __; 미완성인채로 일단 스크립트는 업로드합니다. 물론 "이게 최선의 스크립트입니까?"라는 물음에는 당당하게 No라고 대답할 수 있는 수준입니다; init python: narrator = Character('', kind=nvl) b = Character('백안시') user = {"red": '0.. 더보기
스크린언어에서 persistent 변수를 사용하려면. SetField 를. textbutton '네' action SetField(persistent, 'Under19', True) textbutton '아니오' action SetField(persistent, 'Under19', False) persistent 는 SetVariable에서 사용할 수 없습니다. # 안먹힘 textbutton " 네" action SetVariable("persistent.Under19", True) http://lemmasoft.renai.us/forums/viewtopic.php?f=8&t=9213 더보기