본문 바로가기

렌파이/시스템 추가하기

대사 다시보기 스크립트 delta라는 유저가 만든 스크립트를 수정했습니다. 대사 다시보기 스크립트 파일 위 파일을 다운 받고 프로젝트 폴더/game 경로 안에 넣어두면 됩니다. 그 뒤부터는 say 화면에서 마우스 휠을 위로 올리면 텍스트 다시보기 화면이 나타납니다. 스크린 언어와 has 문을 이용해 만든 스크립트라 6.14 버전 이상에서만 사용할 수 있을 것입니다. 그러나 6.99 이전 버전에 대한 호환성은 확인되지 않았습니다. 15.9.30 파이톰이 viewport 부분을 수정한 덕분에 6.99.6에서도 동작합니다.narrator 와 name_only 캐릭터의 대사가 기록되지 않는 문제를 수정했습니다. 140511window show voice '''대사'처럼 스크립트를 작성했을 때 다시보기 화면에서 텍스트를 클릭해도 대사가.. 더보기
렌파이 6.99 이전 버전용 한글 입력기 130331 2015.5.10 렌파이 엔진이 6.99로 업데이트되면서 기본 input 함수로 한글을 입력할 수 있게 되었습니다. 6.99 버전 이전의 엔진을 사용해 게임을 제작하실 때에 한글 입력기를 쓰고 싶으시다면 이 한글입력기를 사용해주세요 130331 입력받을 글자 수 length 가 지정된 상태에서 마지막 글자가 완성되지 않았을 때 숫자 및 특수 기호를 입력했을 경우 마지막 한글 글자가 완성됨과 동시에 특수기호가 입력되어 글자 수 제한을 초과하던 현상을 수정했습니다. 110712 근 1년만의 개량품입니다. ui.keymap을 왕창 이용했던 이전 버전과는 급(?)이 달라 만족스럽네여. 코드는 여전히 더러워보이지만... 렌파이 위키에 있는 쿡북 내용도 함께 수정해놓았습니다. 사용법 1. 위 코드를 다운로드하시고 .. 더보기
던전 크롤 스타일의 프레임 2.0 예제 다운로드및 스크립트 전문 전투 시스템과 지도(갔던 길이 밝혀지는 기능) 등이 갖춰진 게임틀입니다. Pseudo 3D with ray casting 이라는 글을 통해서 이것과 비슷한 그림을 본 적이 있었기 때문에 그냥 넘어갔었는데, 그것보다는 실제로 그럴 듯한 게임을 만들기에 좀 더 유용해보입니다. 퍼블릭 도메인, 즉 저작권은 없다고 하니 이것저것 시도해보시는 것도 재미있을 듯..각 스크립트에 적힌 내용을 간략하게 해석해보면 다음과 같습니다. dungeon.rpy미니맵과 던전을 그리는 방식이 적혀있습니다. battle.rpy스킬, 액터, 전투 방식을 구현한 스크립트가 적혀있습니다. script.rpybattle.rpy 와 dungeon.rpy 에 정의된 기능들을 끌어와, 액터(고블린, 플레이어)와 스.. 더보기
옷갈아입히기 시스템 만들기 Long Live The Queen 을 설명하다가 이런 시스템을 블로그에서 다뤄본적이 없는 듯하여 작성해봅니다.ConditionSwitch와 im.Composite 함수를 활용해 간단히 만들어본 시스템입니다. init python: cloth = None # 현재 입고 있는 옷 변수 init -1: # 하트옷 이미지 image zola heart = im.Composite( (198, 388), # 합성할 결과물 이미지 크기 (0, 0), "person.png", # 합성할 이미지를 배치할 위치. 왼쪽위 꼭지점의 x, y 좌표, 합성할 이미지 파일 이름 (0, 0), "heart.png") # 하트 옷 # 별옷 이미지 image zola star = im.Composite( (198, 388), # 합성.. 더보기
렌파이에서 구현된 인벤토리와 상점 기능 140609 안녕하세요. 백안시입니다. 다행히도 마지막으로 블로그를 관리한 지 한달이 넘기 직전에 (.. 와서 간신히 얼굴 한 번 비추네요. 오늘은 포럼을 잠깐 둘러보다가 유용한 기능을 발견해서 강의 예고 삼아 글을 하나 적습니다. saguaro라는 유저가 (저 개인적으로도 굉장히 갈망했던..) 인벤토리와 상점 시스템을 구현했네요. 이번 주말에 한번 파보고, 강의글도 함께 작성해보도록 하겠습니다. (강의글을 작성할 땐 이 글을 수정해 업로드할 예정입니다)그럼 다들 즐거운 창작생활 하시길 바라며.. 140614 금요일에 출근해서 토요일에 퇴근한 관계로 강의글 작성은 다음주로 미룹니다..ㅇ 더보기
제작자 정의 디스플레이어블 - 3 미니게임 Sharon 스크립트 짜기 5 개요뭔가 허전한 듯해서 이미지를 추가했습니다. 음악도 넣고 배경도 좀 꾸미면 그럴싸하겠네요. 스크립트 init: ## 미니게임 Sharon에서 쓸 이미지 ## image playerMoving: 'player1.png' pause 0.05 'player2.png' pause 0.05 'player3.png' pause 0.05 'player4.png' pause 0.05 repeat image playerStop: 'player1.png' image enemyMoving: 'enemy1.png' pause 0.05 'enemy2.png' pause 0.05 'enemy3.png' pause 0.05 'enemy4.png' pause 0.05 repeat image enemyStop: 'enemy1.png.. 더보기
제작자 정의 디스플레이어블 - 3 미니게임 Sharon 스크립트 짜기 4 개요 영원히 고통받을 줄 알았던 무궁화꽃이 피었습니다 미니게임의 마지막입니다. 스크립트 지난주까지 짰던 스크립트가 오작동했던 것은 단순히 이프문이 꼬였겠거니 생각했습니다만 수정하고나서 다시 보니 완전 엉망진창이었습니다.... 길어서 접었으니 클릭하면 펼쳐집니다. init python: class Sharon(renpy.Displayable): def __init__(self): renpy.Displayable.__init__(self) # 게임에서 사용할 디스플레이어블 self.ready = Text("준비") self.go = Text("시작") #self.sharon = Text("무궁화 꽃이 피었습니다") self.s = "무궁화꽃이피었습니다" self.sharon = [] for i in self.. 더보기
제작자 정의 디스플레이어블 - 3 미니게임 Sharon 스크립트 짜기 3 개요지난 강의의 계속입니다. 이번에 추가한 내용은 술래의 판정 부분입니다. 스크립트수정한 부분이 너무 많아서 하이라이트 표시하기가 힘드네요-.- 49번째 줄 ~ 73번째 줄, 92번째 줄 ~ 153번째 줄, 163번째 줄, 201번째 줄을 주로 살펴보시면 되겠습니다. 지난 글에 첨부했던 이미지를 빼면 전부 텍스트니 복붙해서 실행하보면 어떤 모양새인지 감 잡으실 수 있을 듯. init python: class Sharon(renpy.Displayable): def __init__(self): renpy.Displayable.__init__(self) # 게임에서 사용할 디스플레이어블 self.ready = Text("준비") self.go = Text("시작") self.sharon = Text("무궁화 .. 더보기
제작자 정의 디스플레이어블 - 3 미니게임 Sharon 스크립트 짜기 2 개요지난번의 무궁화꽃이 피었습니다 미니 게임의 계속입니다. 스크립트 예제 init python: class Sharon(renpy.Displayable): def __init__(self): # 렌파이가 디스플레이어블을 만들 때 반드시 포커스 계산을 하는 것 같습니다. # 이 라인을 안 적어주니 그 작업을 못 해서 에러가 나는 듯합니다. renpy.Displayable.__init__(self) # 게임에서 사용할 디스플레이어블 # 는 결국 텍스트만으로 .. self.ready = Text("준비") self.go = Text("시작") self.sharon = Text("무궁화 꽃이 피었습니다") self.judge = Text("플레이어님 움직였어요~") self.tagger=Text("술래", co.. 더보기
제작자 정의 디스플레이어블 - 3 미니게임 Sharon 스크립트 짜기 제작자 정의 디스플레이어블을 이용하여 미니게임을 직접 만들어봅시다. 이번에 만들어볼 게임은 무궁화 꽃이 피었습니다를 변형한 미니 게임입니다. 게임 규칙 (7분 25초부터) 1. 술래 캐릭터가 뒤돌아본 동안 플레이어 캐릭터를 조금씩 전진시킵니다. 컴퓨터 캐릭터보다 먼저 결승선에 도달하면 승리. 2. 캐릭터를 전진시키는 건 마우스를 움직이는 것으로 판별. 한번 마우스가 왔다갔다 할 때마다 캐릭터는 아주 조금씩 움직입니다. 3. 플레이어 캐릭터가 술래에게 들키면 일정 거리를 되돌아갑니다. 뭐 하다 보면 어떻게 되지 않겠습니까 분석 이 미니게임에서 필요한 정보가 무엇인지 대략 생각해봅시다. 이미지 플레이어 캐릭터 / 컴퓨터 캐릭터 게임 시작 전 대기 이미지 이동 이미지 멈춤 이미지 (들켜서)되돌아감 이미지 승리.. 더보기
제작자 정의 디스플레이어블 - 2 미니게임 퐁 스크립트 분석 개요 CDD 두 번째 예제 스크립트 분석입니다. 이번 스크립트는 렌파이 길라잡이 게임에 있는 미니게임 퐁의 스크립트입니다. 렌파이 설치 폴더/tutorial/game/demo_minigame.rpy 파일에서 찾아볼 수 있습니다. 일단 런처를 켜고 튜토리얼을 실행해서 minigames 메뉴를 누르고 퐁 게임을 실행해 몇 판 해본 뒤에 이 글을 읽으시는 게 이해에 도움이 될 겁니다. 또한 이 스크립트는 미니게임을 만들기 위한 스크립트라 지난번에 봤던 스크립트와 다른 점이 많습니다. 두 스크립트를 비교해서 살펴보세요. expand source를 클릭하면 엄청난 양의 스크립트가 펼쳐집니다. 지난 글은 괜찮았지만 이번 글은 물흐르듯 읽으면 이해하기 힘듭니다. 옆에 스크립트를 펼쳐놓고 스크롤을 위 아래로 왔다갔다 .. 더보기
제작자 정의 디스플레이어블 - 1 단순 디스플레이어블 생성 소스 분석 정의렌파이의 기본 기능들로는 구현할 수 없는 디스플레이어블 - 미니 게임 등을 직접 만들기 위해서는 제작자 정의 디스플레이어블, 줄여서 CDD을 이용합니다. 명칭이 붙어 있어서 특별하고 특정한 기능처럼 보이지만 그냥 사용자가 임의로 필요한 디스플레이어블을 직접 만들기 위해 필요한 방법 정도로 보면 됩니다. CDD를 이용해 만든 기능이 튜토리얼에 있는 미니 게임인 퐁이고 또 하나는 제가 만들었던 한글 입력기입니다. 저도 잘 모르는데다 ㅇ 더보기
쪽지 시스템 saguaro 라는 유저가 만든 쪽지 시스템입니다. 1. 쪽지를 표시하기 2. 쪽지 상태 (읽음/읽지 않음) 표시 3. 쪽지에 답장하기 4. 쪽지 삭제/복구하기 같은 기능이 포함되어있네요. 유용할 것 같아 설명을 몇 마디 덧붙입니다. 데모 http://lemmasoft.renai.us/forums/viewtopic.php?f=51&t=19295 새 프로젝트를 만들고 위 링크로 접속해 message.rpy, screens.rpy, script.rpy 를 새 프로젝트에 복사+덮어쓴 후 프로젝트를 실행하여 이 시스템을 테스트해봅시다. 그리고 내려받은 스크립트의 내용도 확인해보세요. 설명 add_message(제목, 보내는 사람 이름, 내용, 답장 버튼을 눌렀을 때 표시할 내용이 적힌 레이블 이름) 새 쪽지를 .. 더보기
이벤트 다시보기 메뉴 만들기 이벤트 다시보기 기능을 만들고 싶다면 Replay 스크린 액션과 renpy.call_replay 함수를 이용하면 됩니다. '다시보기' 를 만들기 위해 스크립트를 다시 작성할 필요 없이 기존 스크립트를 재활용하여 다시보기를 만들 수 있습니다. 다시보기 만들기 레이블 준비 ### "마침내, 나는 마법사를 만났다." label meaning_of_life: scene "마법사" "삶의 의미는 무엇이라 생각해?" "마법사" "나는 줄곧 열심히 그 생각만 해왔지. 줄곧, 바로 그것만을 생각하며 시간을 보냈어." "마법사" "그리고 내 대답, 삶의 의미란 바로..." "마법사" "43이다." $ renpy.end_replay() "마법사" "어쨌든 뭐 그런 거지." 다시보기에서 사용할 레이블이 있다면 다시보기 모드.. 더보기
용어집 만들기 용어집.. 이라고 하나요? 여튼 게임 내의 사전 시스템입니다. 용어가 적힌 버튼을 클릭하면 옆에 설명이 뜨는 방식이며, 기타 위치 지정이나 디자인등은 지정하지 않은 생 뼈대(..) 스크립트입니다. 1. $ dictionary = [['???', ''] for x in range(0,9)] screen dictionary: vbox: for name, desc in dictionary: hbox: # name 은 용어의 명칭 # desc 는 용어 설명문 textbutton name action If(desc != '' and [name, desc] in dictionary, Show('description', desc_text = desc), None) # 위의 Show 에서 desc_text 로 받은 용.. 더보기