▲ 대체 어디서 잘못된걸까~

그러고 보니 제가 입사했을 때의 시점이 떠오릅니다. 당시에 저는 IT 기기에 대해선 크게 알고 있지 않던 사람이었습니다만, 우연히 IT 기기의 사진들을 찍어야 할 때가 왔었습니다. 당시, 카메라의 설정을 잡는 법을 몰라 이런저런 설명을 선임분에게 들었는데, 그것을 잊지 않기 위해서 카메라 공부를 조금 했습니다. ISO(감도)와 조리개, 그리고 셔터 스피드에 대해서 이해하기 위해 노력했고, 이 뒤로 크게 발전했냐면, 아주 조금씩만 발전했습니다. 카메라 찍는 감각이 없더라고요. 제가.

이런 말씀을 드리는 이유는 제가 살아보면서 깨달은 점이 있다는 것입니다. 바로 '발전하지 않으면 안 된다'는 것이었습니다. 여기에 와서 과거에 쓰인 기술을 보고 이를 막무가내로 도입하면서 수정하고, 값을 조절하면서 써보기도 했고, 손에 잡혀있는 기술을 이용해 뭔가 새로운 걸 만들 수 있었다면 도전해보기도 했습니다. 결국 싫어하는 작업도 숙달되고, 익숙해지면 남들보다 크게 발전하니깐요. 사람은 어쨌든 배우면서 계속 무언가를 추구해야 하는 것 같습니다.

이전에는 단순히 배우기 싫다며 공부를 멀리했지만, 지금은 이 앞으로 나아가기 위해선 어떤 기술을 공부해야 할까를 고민하며 꼭 필요한 공부는 하기 시작했습니다. 뭐, 사실은 그냥 재밌겠다 싶어서 배우는 것들뿐입니다. 이전에는 포토샵이었고, HTML 스킬이었다면. 지금은 '렌파이 엔진(Ren'Py)'에 흥미를 느끼고 있습니다.

이 글은 렌파이 엔진에 대한 간단한 이력과 소개, 그리고 제가 렌파이 엔진을 만지면서 재미있다고 느낀 점과 다시 배워야 할 점에 대해서 작성되어 있습니다. 그래서 공부했던 것을 전파하는 강의라기보단 렌파이 엔진을 만지고서 느꼈던 점을 서술한 것에 가까운 주저리죠. 저도 0부터 시작하는 초보자라서 저에게 얻어갈 수 있는 건 없을 거로 생각합니다. 그 때문에 단순히 재미로만 봐주시고 만약 렌파이 고수분이 계신다면 귀엽게 봐주시면 감사하겠습니다.




근데 '렌파이'는 뭔가요?



Ren'Py(렌파이)는 2004년에 개발되었으며, 톰 로타멜(Tom Rothamel)이라는 개발자가 만든 비주얼 노벨용 엔진입니다. 렌파이란 단어의 모티브는 '연애(恋愛/렌아이)'와 파이썬의 합성어라고 하더라고요. 현재 '두근두근 문예부'나 '노베나 디아볼로스', '여름의 끝에 피는 꽃', '그래도 그녀를 그리워한다'와 같은 게임들이 렌파이 엔진을 사용하고 있습니다.

렌파이를 이용해 단어와 이미지, 그리고 소리를 쉽게 결합해 비주얼 노벨이나 라이프 시뮬레이션 게임을 제작할 수 있고, 확장성이 넓어 PC(윈도우, 리눅스, 맥)에서 개발해 PC, 모바일(안드로이드, iOS)에 게임을 출시할 수 있습니다. 또한 무료로 오픈되어 있어 추가 비용이나 수수료를 지불할 필요 없이 게임을 개발해 출시할 수 있단 장점도 있습니다.

렌파이의 가장 큰 특징은 '직관적이고 쉬운 언어'에 있습니다. 기초적인 파이썬 문법을 사용하긴 하지만 자신이 간단한 비주얼 노벨을 만들려고 하는 것이라면 시나리오와 그림만 있으면 금방 제작할 수 있을 정도입니다. 물론 더 발전하려면 렌파이 언어에 대한 기본적인 이해가 필요하겠지만 여기서 더 나아가면 턴제 액션을 구현할 수 있을 정도가 되실 수도 있습니다. 여기서 파이썬 언어에 대한 지식이 있다면 더욱 복잡한 논리를 구현시킬 수도 있습니다.

그리고 애니메이션 효과를 주어 이미지의 페이드화, 픽셀화 등을 작업할 수 있고, 회전, 이동, 크기 조정 등도 조절할 수 있습니다. 동영상 재생도 지원되기에 필요하다면 동영상을 넣어 연출용으로 사용할 수도 있죠. 또한 한국에서도 렌파이 엔진을 공부하는 사람들이 모인 카페가 있고, 유튜브로 강의를 시작한 분도 있기에 기본적인 지식을 알고 가기 쉬운 편입니다. 물론 더욱 복잡한 구현을 원한다면 해외 게시물을 봐야 할 수도 있습니다.

▲ 어드벤처 게임, '노베나 디아볼로스'나

▲ 무료로 즐길 수 있는 '여름의 끝에 피는 꽃'도 렌파이 엔진으로 제작되었습니다




굳이 왜 렌파이를 선택했나요? 유니티, 언리얼은요?


▲ 과거에는 C++를 배우려고 한 적이 있었습니다...... 있었는데요.

저는 애초에 프로그래머로서의 그릇은 아니라고 생각합니다. 언어가 어렵...기도 하고 산수도 약한 편이지만, 이전에 저는 C++를 배우려고 했던 적이 있었거든요. 그때, 생각하게 되었습니다. 재미없기도 한데 앞으로도 이런 식으로 접근하면 배우기는커녕, 아무것도 할 수 없겠다고 말이죠. 그래서 저는 제가 강점을 보일 수 있는 직종이나 취미를 찾아왔었고, 그 뒤로 코드 뭉치로 된 문자열을 다시 볼 일은 없을 거로 생각했습니다. 지금은 아니지만요.

그렇기에 저는 제가 이루고 싶었던 것이 무엇인지 다시 한번 골똘히 생각하게 되었습니다. 그러고서 나온 결론은 '이야기의 아름다움'을 알아가고 싶단 것이었죠. 실제 저는 '푸른 저편의 포리듬'이나 'ATRI -My Dear Moments-'와 같은 비주얼 노벨을 통해 이야기와 음악, 그리고 일러스트로 전달되는 비주얼 노벨만의 매력에 푹 빠지게 되었습니다. 물론 게임은 '상호작용의 깊이'가 뛰어나야 한다고 생각하지만, 이야기를 즐기는 데엔 비주얼 노벨이란 장르도 부족함은 없으니깐요.

그리고 이건 생각보다 크게 중요하다고 생각하는데, '지금 제가 할 수 있는 것'과 '지금의 제가 하고 싶은 것'을 고민하는 것입니다. 저는 이미 C++를 공부하다 실패한 전적이 있습니다. 물론 재미를 깨우치지 못했다는 부분도 있지만, 앞으로도 C 언어와 관련된 공부에 거부감이 들 가능성도 크겠죠. 그에 반면, 렌파이 엔진은 지금 배우면서 나름의 재미를 느끼고 있습니다. 덕분에 파이썬 언어로 돌아가 공부하기 시작한 지금도 나름의 열의를 보이고 있습니다. 그렇기에 지금의 저에게는 C보단 파이썬, 렌파이 엔진의 공부가 더 적절하다고 생각했습니다.

그리고 비주얼 노벨을 만들고 싶었습니다. 이건 위와 일맥상통하는 부분도 있는데, 지금의 제가 할 수 있는 부분은 '이야기를 만드는 것'이라고 생각했습니다. 사실 저는 프로그래머도 아니고, 그렇다고 일러스트레이터도 아니니까, 그쪽에 대한 강점은 없다고 생각했기 때문입니다. 대신 저는 이야기를 좋아했고, 시나리오 기법에 대해 적힌 책을 읽어보기도 했으며, 마지막으로 렌파이 엔진이 단순한 대화 스크립팅 제작이 정말 쉬워서 만들기 편하다고 생각한 것도 있었습니다. 만들고 싶은 장르, 편하다란 느낌, 그리고 제가 하고 싶어했던 부분까지 전부 일치했기 때문에 저는 두 상용 엔진 대신, 렌파이 엔진을 선택했습니다.

마지막으로 단순하게 '취미의 영역'으로 배우는 것도 이유 중 하나입니다. 렌파이 엔진으로 게임을 만들어 출시한다고 해도, 취미의 영역에서 크게 변할 것 같진 않네요. 만약 저도 게임업계의 프로그래머로서 들어가고 싶었었다면... 다시 C 언어 공부를 잡았을 것 같긴 합니다. 유니티, 언리얼 엔진도 C 계열 언어로 되어 있으니깐요.

▲ 귀여운 고성능 로봇, 아트리나

▲ 하늘을 나는 기쁨을 알려주는 아오카나를 보고 저는 비주얼 노벨이란 장르의 힘을 알게 되었습니다

▲ 하지만 아직 모르는 것투성이입니다. 이건 뭐고, 저건 뭐지?




지금 만들고 계신 것은 무엇인가요?


▲ 저는 렌파이 엔진으로 쓰레기를 만들었습니다

사실 만들고 있는 건 없습니다.

정확하게는 아직 상용화 게임을 제작할 생각은 없네요. 일단 지금 생각하고 있는 건, 배우고 스크립팅을 작성해보고 결과를 확인해보고, 제가 생각하는 원하는 형태로 개발하기 위해 다시 공부한다는 생각뿐입니다.

우선 이 글을 작성하기 전에 이미 여러 번 테스트를 해봤습니다. 가지고 있는 에셋을 활용한 테스트 1번과, 본래 생각해두고 있었던 이야기를 그려낸 테스트 2번, 그리고 이번에는 여러분들에게 보여주기 위한 테스트 3번을 준비하고 있습니다. 1번은 앞으로도 새로운 기능을 시험해볼 것 같고, 2번은 새로운 기술을 익히기 전까진 당분간 보류할 것 같습니다. 아직 준비할 게 많거든요.

▲ 제가 참고했던 강의 영상은 이거였습니다. 제가 나열한 대부분의 내용이 이 영상에 나오니 꼭 시청 바랍니다
(출처: 유튜브 '레트로 retr0' 채널)

저는 위 영상을 보면서 렌파이 엔진을 통한 스크립팅을 바로 배웠습니다. 해당 강의의 장점은 정말 코딩의 코를 몰라도 제작이 가능하단 점입니다. 대신, 강의에서 나오는 이야기를 잘 들어 어떤 의미인지 곱씹고 가주시는 편이 좋습니다.

(※ 이후의 내용은 시행착오 요소가 들어가 있기에 렌파이에 관한 공부는 위의 유튜브 강의를 참조바랍니다.)


먼저 대사만 작업하시게 된다면 'label'이라는 단어를 보실 수 있습니다. 이는 하나의 단락으로 기본의 label을 공통 루트로 잡거나, 혹은 챕터로 잡아, 끊어내실 수도 있습니다. 저는 label을 총 다섯 개로 두었습니다. 하나는 굿 엔딩(good_ending), 다른 것은 스토리의 후속(continue1과 2), 배드 엔딩(bad_ending), 회상(back_story1)으로 단락을 잡아두었죠. 아예 하나의 이야기로 시작해서 끝을 맺는 형태라면 이렇게 복잡하게 해둘 필요는 없지만, 선택지로 인한 분기점을 잡아두실 거면 이해하시는 편이 좋습니다.

그리고 define(define 문은 초기 시간에 단일 변수를 값으로 설정)을 통해 한 단어의 값을 정해줄 수 있습니다. 예를 들자면

  define ch_hero = Character('김수한무', color="#000000")
  define narrator = Character(None, kind = nvl)

위 두 가지의 정의가 있습니다. 하나는 ch_hero(캐릭터_주인공을 영어 단어로 만들어본 것. 임의 지정입니다.)를 'Character'로 정의한 것이죠. '김수한무'란 단어가 나오고, 이를 RGB 컬러 '#000000'으로 감싸놓은 것입니다.

  ch_hero "후, 힘들다. 자기소개도 참 힘든 법이지."

그럼 이제 대사를 출력시킬 때, 'ch_hero'라는 단어를 적기만 해도 렌파이 엔진에서는 알아서 선생이란 단어와 폰트의 색을 검정색으로 입혀 출력시킵니다. narrator의 부분은 강의에서 사용했던 방법인데, 독백을 전체 화면에 쏘아주고 싶을 때, 쓰면 된다고 알려주셨던 부분입니다.

▲ nvl 모드로 변경하고 작성한 나레이션 스크립트

정의하는 방식은 똑같지만 Character 내용물이 다릅니다. 우선 None은 없는 캐릭터, 즉 내레이션을 지정하는 문구지만, 여기에 kind = nvl을 통해 한 번에 여러 줄의 텍스트가 화면에 표시되도록 꾸민 것입니다. 이는 define narrator = nvl_narrator로도 정의시킬 수 있지만, 왼쪽 정렬로 이루어져 있는 특징이 있습니다. 이렇게 하지 않으면, 전체 화면이 아닌 텍스트 박스를 통해 독백을 전달합니다.

  image bg_outside = "bg/bg_outside.jpg"

  image scg_heroine:
    im.FactorScale("character/heroine/heroine.png", 0.25)
    yalign 1.0

▲ 이렇게 해줘야 캐릭터가 정상적으로 출력됩니다. 뒤의 값은 원하는 방식대로 조절해가시면 됩니다

이미지를 불러오는 방식은 이렇습니다. 물론 그 전에 (렌파이 게임명)\game\images에 이미지를 넣어야 합니다. 강의에서도 설명하지만, 웬만하면 images 폴더에 'character(캐릭터)', 'bg(배경/백그라운드)'처럼 폴더를 따로 분리하시는 편이 좋습니다.

배경은 단순히 image 함수에 bg_(원하는 배경이름)을 지정해주시고 파일만 부르는 형태면 됩니다. 반대로 이미지는 그대로 불러내면 기존에 있던 사이즈를 그대로 표현해 불러냅니다. 예를 들어서 캐릭터 이미지가 1000×1000이라면, 이를 임의로 조절하지 않고 그대로 불러낸다는 것이죠. 또한, XY축이 정중앙이 아니라 좌측에 위치되어 있어서 위치 조절도 필요한 상황입니다. 이를 위해서 사이즈 조절은 'im.FactorScale' 함수를 이용하고, Y값 조절은 'yalign'을 이용합니다. HTML의 table align와 비슷한 느낌이겠네요.

im.Scale과 im.FactorScale의 다른 점이라면 Scale은 Width와 Height를 어떻게 조절하는지입니다. FactorScale은 둘의 비율을 한 번에 조정하고, Scale은 둘의 값을 따로 조정합니다.

▲ 대충 이미지 안의 폴더명은 이렇게 되어 있습니다

  define center = Position(xalign = 0.5)
  define leftmost = Position(xalign = 0.0)

그리고 미리 xalign의 값을 따로 지정해주지 않고 포지션을 정해주는 것도 가능합니다. define 함수를 통해 center나 left 등의 값을 재정의해주시고, Position 함수를 통해 xalign의 값을 조정하는 방식입니다. center가 0.5라면, 왼쪽(left)은 0.0, 오른쪽(right)은 1.0의 값을 지정해주시면 됩니다. 숫자가 크면 클수록 오른쪽으로 가는 방식입니다. 참고로, 0.2나 0.3을 left로 지정하고, leftmost(가장 왼쪽) 같은 단어를 사용해 0.0값을 매기는 것도 가능합니다. 이러면 캐릭터의 크기에 따라 균형있게 다섯명을 나열할 수도 있습니다.

  scene bg_black with fade

  show scg_heroine_happy at center with dissolve
  hide scg_heroine_happy at center with dissolve

▲ 화면 전환과 캐릭터의 show/hide를 사용하면 이렇게 됩니다
사실 이건 회상씬에서 원래로 돌아오는 형태를 사용한 장면이지만요

그리고 준비된 배경과 이미지를 표현하려면 scene와 show/hide를 이용하면 됩니다. 배경은 scene bg_배경명으로 불러내면 되는데, 뒤에 붙은 'with fade'는 with 함수를 통해 fade를 함께 불러낸다고 보시면 됩니다. fade는 촬영 기법에 쓰이는 그 '페이드'가 맞습니다. 배경을 없애면 포토샵에서 흔히 볼 수 있는 투명 배경이 나오기에 저는 bg_black이라는 배경을 따로 만든 뒤, 이를 활용했습니다. 검은 배경은 상황을 일단락 시킬 때, 사용했습니다.

show/hide는 scg_캐릭터명을 불러낼 때 사용합니다. 현재 캐릭터명이 heroine_happy로 되어 있는데, 이는 캐릭터의 표정을 따로 저장해 렌파이에 불러왔기에 그렇습니다. 여기서 at center가 붙여져 있는데 방금 전에 yalign을 정했지만, xalign을 따로 정하지 않고 Position으로 재정의해줬죠. 이걸 여기에 붙여 xalign의 값까지 조절하는 것입니다. 이렇게 하면 향후, xalign의 값을 일일이 조절하지 않아도 at center 등을 통해 가로열을 정렬할 수 있습니다. dissolve는 0.5초 동안 이전 화면에서 새 화면으로 서서히 전환하는 트랜지션 기능 중, 하나입니다.

▲ 다른 사람이 제작한 음악을 이용하실거라면 저작권 무료인 곡을 사용하도록 합시다

  play music "audio/bensound-memories.mp3" loop
  play sound "audio/effect.mp3"
  stop music

음악은 이미지들처럼 따로 불러올 필요가 없습니다. 이런 식으로 play music, 혹은 play sound로 지정하면 되죠. 음악에도 저작권이 있기에 저는 bensound라는 사이트에서 무료 음원을 가져왔습니다. 사용한 곡명은 각각 Memories와 Psychedelic입니다. 그리고 펑 터지는 이펙트를 구해 play sound에 배치했습니다. 둘의 차이점은 music은 'OST/배경음'이고, sound는 'effect/효과음'이란 것입니다. 본래 효과음은 .ogg 확장자를 쓰는 것이 좋은데, 저는 임의로 만든 것이기에 .mp3 확장자로 되어 있는 효과음을 사용했습니다. 참고로 play music 마지막에 붙은 loop는 '곡을 반복한다'는 명령어고, stop music은 '음악을 멈추라'는 명령어입니다.

  menu:
    "비비덕":
      show scg_heroine_angry at leftmost with dissolve
      show scg_bibiduck at center with dissolve
      ch_heroine "비비덕이잖아!"
    "비비덕":
      show scg_heroine_angry at leftmost with dissolve
      show scg_bibiduck at center with dissolve
      ch_heroine "비비덕이잖아!"

▲ 비비덕 선택지가 무려 세 개! 냉장고 안에 아이스크림이 많나봅니다

다음은 menu문이네요. menu문을 통해 여러분들이 자주 보던 미연시의 '선택지'를 만들 수 있습니다. menu문 -> 선택지 대사명 -> 선택지를 클릭한 이후 상황을 나열하는 것을 통해 상황을 꾸려낼 수 있죠. 저는 참고로 귀찮아서 전부 '비비덕'(비비빅 패러디)으로 넣었는데, 이런 개그적인 요소로도 활용할 수 있습니다. 이 뒤에 단순히 대사만 나열해줘도 문제 없이 대사가 이어지기 때문에, 가급적이면 대사를 작성하실 때에도 선택지 대사와 자연스럽게 이어질 수 있도록 작성하는 편이 좋습니다.

  $brain_point = 0

  $is_true = True
  $is_false = False

  menu:
    "일단 멋있게 만들어보자!":
      $brain_point = brain_point + 2
    "으음... 적당히 예쁘게?":
      $brain_point = brain_point - 1
    "그런 건 모르겠다. 신에게 맡기자!":
      $brain_point = brain_point + 1
  ch_narrator "(자, 다음은 어느 정도 주물러야 하는지에 대해서야. 몇 번 주무를까...?)"
  menu:
    "적당히 주무르는게 좋겠어.":
      $is_true = False
    "당연히 열심히 주물러야지!":
      $is_true = True

  if(brain_point > 1 and is_true):
    jump good_ending
  elif(brain_point > 0 and is_true):
    jump story_continue1
  else:
    jump bad_ending1

▲ 이건 배드 엔딩을 상정하고 만든 루트

▲ 이건 굿 엔딩을 상정하고 만든 루트네요

마지막은 미연시처럼 '멀티 엔딩'을 설정하는 방법입니다. $ 명령어를 통해 포인트를 만들어두시면 되는데, 저는 이를 brain_point로 지정했습니다. 만약 특정 캐릭터의 인연을 설정하고 싶다면 $ heroine1_relationship = 0, $ heroine2_relationship = 0 등으로 지정해주시면 됩니다. 또한, 진실, 거짓의 값도 지정했는데요. 이를 이용하면 다양한 변수를 꾸밀 수 있게 됩니다.

menu문을 통해 선택지를 만들고, 이 선택지를 고르면 해당 포인트가 + 혹은 -가 될 수 있는 코드를 넣고, 또한, 이 선택지가 진실이며, 이 선택지는 거짓이라는 코드를 넣어주시면 해당 선택지는 그에 대한 명령을 실행하는 선택지가 됩니다. 여기서 마지막에 if/else/elif(C++의 elseif 문)를 이용해 브레인 포인트가 1보다 크고 (2의 값 이상) 진실이면 굿 엔딩으로, 0보다 크고(1의 값 이상) 진실이면 후속 이야기 1편으로, 그 외의 값이면 전부 배드 엔딩으로 향하도록 설정했습니다.

참고로 후속 이이기 1편 뒤에는 jump와 call 문을 통해 후속 이야기 2편, 혹은 회상으로 해당되는 라벨로 들어가도록 설정해두었답니다. 이런 식으로 스크립트를 통한 기초적인 미연시를 제작하는 것은 꽤 간단하다는 것을 알 수 있었습니다.

▲ 참고로 슬라임이 되는 아이디어는 갑작스럽게 생각나서 넣어봤습니다...




그럼, 말씀하신 것만 배우면 문제없을까요?



꼭 그렇진 않습니다.


왜냐하면 제가 배운 것은 스크립팅의 기본적인 영역이기 때문입니다. 렌파이가 아무리 쉽다곤 하지만 영역을 더욱 확장하기 위해선 자신이 사용하는 함수의 기본적인 이해와 발전은 필수입니다.

렌파이 엔진은 확실히 간단하고 쉽고, 저처럼 강의를 한두 개만 보고서도 기본적으로 일러스트, 음악, 그리고 스토리가 나열된 본편의 이야기를 쉽게 제작하실 수 있습니다. 하지만 여러분, 기본적인 옵션이나 UI를 그대로 가져갈 생각이 아니시라면, 코드에 사용되는 단어가 어떻게 쓰이고 있는지, 이 스크립트를 작성하기 위한 기본적인 문장에 대한 지식을 갖추고 있는지를 확인하셔야 합니다.

코딩을 전문적으로 공부하고 있는 지인에게 도움을 요청했을 때, 지인이 조언해주었던 이야기가 있습니다. "남이 만든 코드를 보고 공부를 하는 것이라면, 그 단어 하나부터 시작해서 특수문자까지 어떠한 형태로 작동되고 무슨 의미가 있는지 설명할 수 있어야 한다."라는 이야기였죠. 그래서 본문의 제목이 체험기인 이유가 여기에 있습니다. 이 이야기를 듣고 저는 렌파이를 배운 게 아니라, 아직 체험 단계에 들어섰다는 느낌을 받았기 때문입니다.

▲ 네이버 카페, 비모에 계신 'Joonery'님의 코드를 만지작거리면서 '세로열 정렬'을 고민하고 있었습니다
(출처: 네이버 카페, 비모의 'Joonery'님 게시글)

▲ 그래도 알 수 없어서 지인에게 도움을 요청해봤는데, 사실 카페 글을 좀 더 읽어봤어야 했던 문제 같았네요
(출처: 네이버 카페, 비모의 'Joonery'님 게시글)

▲ 세로 정렬을 할 수 있는 vbox와 가로 정렬을 하는 hbox의 차이였을 뿐이었습니다
이렇듯 엔진에 쓰이는 단어의 기본적인 이해는 하시는 편이 좋습니다

렌파이 엔진은 자신만의 단어도 가지고 있는 엔진이며, 렌파이만의 단어를 조합해 게임을 제작하는 것이 쉬운 편입니다. 하지만 퀵 메뉴를 원하는 대로 접거나 펼치려고 하거나, 갤러리를 만드는 등. 무언가를 제작해 추가하려면 꼭 렌파이 언어에 대한 이해도가 필요합니다. 심지어 렌파이에서도 파이썬 함수를 이용해 무언가를 제작할 수 있으니, 파이썬에 대한 이해도가 있으면 더욱 좋습니다.

마침, 렌파이 엔진을 공부할 수 있는 요소가 널려있습니다. 첫 번째는 한국어로 번역된 비공식 렌파이 매뉴얼 페이지, 두 번째는 정보가 공유되고 있는 카페와 유튜브에서 강의나 코드를 보고 배우는 것입니다. 저는 두 번째를 먼저 보면서 개발에 대한 재미를 익혔고, 다음에 가지고 있지 않은 기본적인 지식을 갖추기 위해 첫 번째로 돌아가 쓰이는 단어에 대해 공부를 하기 시작했습니다.

렌파이 엔진의 기본 골자는 pygame. 즉, 고급 프로그래밍 언어 중 하나인 '파이썬'입니다. 그래서 저는 이해도를 높이기 위해 파이썬 공부로 되돌아갔습니다. 아직은 함수를 쓰고 배우는 중이지만, 먼저 렌파이 스크립팅 강의를 듣고서 보게 되니 '이 코드는 여기서도 쓰이는구나.', '단순한 수칙연산에서 쓰였던 걸 응용했구나.' 같이 다시 깨닫게 되는 점이 있었습니다. 다시 0으로 돌아간 느낌이라 뭔가 지루한 느낌은 있지만, 가끔 렌파이 엔진을 다시 만져보고 놀면서 파이썬 공부를 함께 하려 합니다.

이러한 만들고 싶은 확실한 동기가 있으면 여러분들도 충분히 게임 개발에 대한 재미를 붙이실 수 있습니다. 물론 1인 개발은 엄청 어려운 영역이죠. 사실상 자신이 혼자 그림을 그리고, 음악을 만들어 붙이고, 개발하면서 대사를 만들어야 하니깐요. 저는 그래서 취미의 영역으로만 두고, 다른 공부와 병행하면서 배우고 있습니다. 하지만 그래도, 기회만 된다면 언젠가 1인 개발이어도 좋으니 저만의 이야기가 담긴 게임을 하나 제작해 배포하고 싶네요. 꽤 오래된 생각이었고, 지금 배우고 있으니 언젠가 실현되리라 믿고 있습니다.

자, 그럼 저는 다시 공부하러 돌아가 보겠습니다.

▲ 크아아악! 힘들어!

▲ 힘들면 다시 렌파이 언어를 배우고 가지고 놀기!

▲ 렌파이 엔진, 정말 재미있어요!