본문 바로가기

전체 보기

선택지에 그림을 더해서 선택지의 뉘앙스 나타내기 같은 말이라고 해도 어떻게 말하느냐에 따라 그 말의 의미가 상당히 달라집니다. 그래서 플레이어는 주인공이 자기 의도와 다른 말투로 얘기하는 걸 보며 당황해하는 경우가 왕왕 있습니다. 따라서 그 선택지가 어떤 뉘앙스인지 알려준다면 오해가 발생하는 걸 막을 수 있습니다. 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 더보기
캐릭터 이미지가 눈을 깜박거리고 대사에 맞춰 입을 움직이게 하기 캐릭터 이미지가 눈을 깜박이고 대사중일 때 입을 움직이게 하는 스크립트입니다. 렌파이 위키의 쿡북 페이지에 실려있는데 직접 사용해보니 설명이 필요할 거 같아 적습니다. 원본 스크립트에 있는 문제점 1. 롤백, 그러니까 마우스 휠 위로 올려서 이전의 대사를 다시 표시 하면 캐릭터 입이 계속 움직인다. >> 버뜨 이건 렌파이의 롤백 시스템때문에 어떻게 될 것 같지가 않네요. 2. 텍스트창에 점을 찍을 때도 입을 움직인다 (................ 이 문제를 해결하려고 임의로 스크립트를 좀 수정했습니다. 난 원본을 쓰고 싶다!! 하시는 분은 하이라이트된 스크립트를 지우고 사용하시면 됩니다. 양이 좀 많아 보이는데, 주석 지우면 몇 줄 안 됩니다. init python: # 드립을 치고 있는 상태를 나타내.. 더보기
렌파이 CG갤러리 스크립트 설명 이하는 6.13 버전 이전에서 CG 갤러리를 만드는 스크립트입니다. 현재는 따로 CG 갤러리를 만드는 방법이 생겼으니 이 페이지를 참고하세요. (여전히 복잡하긴 마찬가지입니다..--;) -------------------- (렌파이 위키의 쿡북 페이지에 있는 CG 갤러리 스크립트 설명입니다. 예전에 작성한 글을 옮겨왔습니다) 이 코드를 사용하면 CG 갤러리를 사용할 수가 있게 되는데 주석도 영어로 써있고 코드도 한 줄로만 되는 게 아니라서 알아보기 힘들다. 고로 약간 번역을 했음. 1. 일단 여기서 new_gallery.rpy 파일을 받고 game폴더에 넣어둔다. 2. init: # 갤러리 네비게이션의 위치. 화면 오른편. $ style.gallery_nav_frame.xpos = 800 - 10 $ s.. 더보기
선택지에 자동으로 핫키 바인딩, 넘버링 하기 transform choice_appear: yanchor 0.0 ypos .9 alpha 0 linear .24 yalign 1.0 alpha 1.0 on hide: linear .24 yanchor .0 ypos .9 alpha 0 screen choice: window: at choice_appear style_group "choice" yalign 1.0 has vbox $ k = 1 for label, action, chosen in items: if action: $ nkey = "%s" %k $ nLabel = nkey +'. ' + label key nkey action action textbutton nLabel: action action xfill True else: text label.. 더보기
조건에 따라 다른 선택지를 나타내는 법 # 1. 리스트와 set 이용 init: $ choices = [ ] label start: menu menu1: set choices "What should I choose?" "Choice 1.": "I choose 1." "Choice 2.": "I choose 2." "Choice 3.": "I choose 3." "Choice 4.": $ choices.remove("Choice 4.") # 에러 방지용 "I choose 4." jump menu1 # if문 이용. init: $ choice1 = choice2 = choice3 = True label start: menu menu2: "What should I choose?" "Choice 1." if choice1: "I choose 1." .. 더보기
웹에 있는 텍스트 파일을 읽어서 렌파이에 띄우기.. label splashscreen: python: import urllib # 아래의 문자열에 적힌 주소에 있는 파일을 읽어서 렌파이에서 읽을 수 있게 한다. a = urllib.urlopen("http://baekansi.hosting.paran.com/data/Quietdrive-jessica.txt") # 텍스트파일은 저장할 때 인코딩을 utf-8로 설정하고 저장해야한다. ReleaseNotes = a.read().decode("utf-8") # a를 읽고 그것을 utf-8로 디코드 vp=ui.viewport(draggable=True, mousewheel=True, xmaximum=680,ymaximum=240, xalign=0.5, yalign=.85) ui.frame() ui.vbox() ui.. 더보기
트랜지션 / ATL 사용 중일 때 클릭 방지하기 label start: #ATL 안 쓸 때 scene night off $ renpy.transition(Dissolve(2)) $ renpy.pause(2) #ATL쓸 때 scene night on: truecenter linear 2 rotate 360 $ renpy.pause(2, hard = True) #이런 짓을 매번 하면 플레이어 입장에서 겁나 귀찮으니까 되도록이면 하지 맙시다. 더보기
스크린 언어로 단축버튼 쉽게 만들기 6.13 버전에서 screens.rpy 파일에 추가되었습니다 -- 뭐라고 표현해야 될지 몰라서 단축버튼이라고 썼는데 대사창 위에 표시되는 스킵, 퀵세이브, 퀵로드 이런 버튼을 얘기하는 거다. 쿡북에 Adding On-Screen Button 보면 옛날 방식만 적혀있어서 블로그에다가 따로 적는다. 1. 단축버튼을 스크린 언어로 만든다. 자신이 필요한대로 작동하게 하려면 렌파이 새 문서에서 적절한 액션을 찾아 확인한다. 2. 매뉴얼의 특수한 스크린 이름들 페이지에서 단축버튼을 사용할 스크린을 찾아서 해당하는 스크린의 스크립트를 가져다가 복사한 다음에 use를 사용해서 단축 버튼 스크린을 추가. 액션이랑 이런 건 매뉴얼에서 찾아보고 필요한 걸 가져다 쓰면 됨. 예제..는 설명했던 것보다 약간 더 기능을 추가함.. 더보기
config.say_menu_text_filter 사용하기 config.say_menu_text_filter config.say_menu_text_filter = None None이 아니라면, say와 menu문 내의 문자열에서 발견되는 텍스트를 제공하는 함수입니다. 그것들을 대체할 새로운(혹은 같은) 문자열을 반환하여야 합니다. 간단하게 온라인 게임에 보면 욕 필터링 있잖아염. 그거 생각하시면 됩니다. 자동으로 텍스트 태그를 입력하기 문장 부호 다음에 {w=.2}라는 텍스트 태그를 써넣고 있었는데 일일히 써넣기가 귀찮아서 만들었음. init python: import re def auto_tag(input): expr = re.compile(r'(\,|\.|\?|\!)\s') input = expr.sub("\g {w=.2}", input) return inp.. 더보기