altair의 프로젝트 일기
LOVE2d 게임엔진으로 지뢰찾기 만들기(1) - 발단 본문
최근 발라트로(Balatro)라는 게임을 플레이하고 있다. 구매한지 얼마 되지도 않았는데 벌써 중독적으로 빠져들었다.
한국어 번역이 부실해 관련 자료를 찾아보던 도중 문득 의문이 들었다. 이 게임은 어떤 엔진으로 만들었을까? 찾아보니 LOVE2d라는 엔진으로 만들었단다.
예전에 객체지향 수업에서 Bangtal 라이브러리와 C++로 지뢰찾기를 만든 적이 있었다. 흥미로운 과제였지만, C++과 객체지향에 더 초점을 맞추어, 게임을 만든다는 느낌보다 패러다임과 기술을 배운다는 느낌이 강했다. C++와 Git을 그 전부터 접했던 나와 달리 다른 팀원들은 둘 다 거의 처음이라 그분들에게 내가 다시 강의를 한다고 생각이 들만큼 경험 차이가 심한 부분도 또 다른 어려움이었다. 아무래도 비전공자 반이었기 때문이다.
물론 프로젝트 동안 많은 것을 배웠다. 비록 뛰어나지 않은 팀원이라도 같이 논의하다보면 코드 외적으로 창의적인 아이디어가 나오기도 하고, 내가 코드에 집중하고 있는 동안 다른 팀원들이 게임성에 더 집중해 결과적으로 더 나은 게임을 만들었던 것 같다.
그럼에도 불구하고 이런 협업의 특성 상 느린 진도와 소모적인 의견 충돌이 계속되는 것이 힘들었다. 만약 더 크고 장기적인 조직이라면 직책과 업무 프로세스로 이를 극복할 수 있겠지만, 우리 같은 단기 프로젝트는 그저 조금씩 나아가는 수 밖에 없었다.
불평이 길었지만 한 마디로 말하자면, 이번에는 LOVE2d 엔진을 사용해 지뢰찾기를 다시 만들어보기로 했다. 간단한 에셋은 내가 직접 도트를 찍어서 만들고, 게임 로직은 경험이 있으니 충분히 짜 넣을 수 있다는 자신감이었다. 실제로 게임 내 이미지는 초기 프로토타입 임에도 꽤 그럴싸 했다(아래 이미지의 첫 번째 블럭 이미지는 친구가 만들어줬다. 친구야 고맙다!).
문제는 LOVE2d 엔진이 Lua 언어를 기반으로 작동한다는 것이었다. 한 번도 배워본적 없는 언어여서 걱정이 많았다. 찾아본 바에 의하면 Lua는 5.1과 최신 버전인 5.4 등으로 심한 파편화가 일어났다. LuaJIT는 5.1까지밖에 지원하지 않고 이 LuaJIT가 가볍고 성능도 좋다. LOVE2d 엔진은 이 Lua 5.1을 사용한다는 것도 알아냈다. 때문에 어쩔 수 없이 지난 버전의 언어를 새로 배워야 했다. 놀랍게도 이런 걱정은 Lua를 배우고 깨끗이 쓸려나갔으니, 그 이야기는 다음에 하도록 하자.
LOVE 게임엔진의 장단점을 정리하면 다음과 같다.
장점
- 완전한 무료 & 오픈소스
- Lua 5.1 & LuaJIT 사용: 생각보다 빠르게 동작하고, 깔끔한 코딩이 가능했다.
- 높은 자유도: 많은 것들을 내가 손수 만들어 넣을 수 있다. 엔진이 제한하는 것이 거의 없다.
- 작은 용량: 엔진의 전체 소스파일 용량이 7MB이며 배포에 필요한 모든 파일들은 10MB 내외다.
- 쉬운 배포: 필요한 코드와 리소스를 압축해 복사하면 exe 파일로 만들 수 있으며 몇몇 dll 파일들을 포함하면 바로 배포할 수 있다.
- 생각보다 많은 자료: 공식 위키가 꽤 잘 되어있고 공식 포럼도 활발하다. 영어만 능숙하다면야...
단점
- "Lua" : 학교에서 배우는 주류언어가 아니며 C 계열 언어가 아니기 때문에(C에 내장해 사용하려고 만들었음에도 불구하고) 새로운 패러다임을 학습해야 한다. ex) OOP가 아닌 Prototyping, 배열이 존재하지 않음(놀랍게도 그렇다!)
- 배포된 패키지를 뜯어보기가 쉽다: 단지 확장자만 zip으로 바꾸고 압축을 풀면 내부 리소스와 코드가 다 보인다.
- 맨 땅에 헤딩: 위의 높은 자유도에 따라오는 단점인데, 엔진이 제공하는 것이 이미지 로드, 스프라이트 출력, 캔버스 등으로 다른 상용 엔진에 비해 매우 빈약하다. 심지어 어떤 물체를 클릭했는지도 알 수 없고, 클릭 이벤트 발생 시 마우스 위치를 받아 그 위치에 어떤 스프라이트가 있었는지 계산하는 방식으로 물체 클릭을 구현해야 한다. 스프라이트 아틀라스 툴까지 제공하는 다른 엔진에 비하면...
- No GUI: 유니티나 언리얼 같은 상용 엔진과 달리 GUI가 아예 없다. 처음부터 모든 것을 코드로 작성해야 한다. 프로그래밍 경험이 적다면 게임 제작보다 코딩에 더 노력을 쏟는 상황이 발생할 수 있다.
- 적은 한국어 자료: 몇몇 블로그나 유튜브 강의가 있지만 공식 포럼 같은 활발한 문답이나 깊이 있는 정보는 없다.
단지 "게임 개발"이 목표였다면 유니티나 언리얼 같은 다른 대안을 선택했을 것이다. 하지만 나는 Lua라는 새 언어도 배워보고 싶고, 과거 Bantal 라이브러리처럼 바닥부터 구현하는 게임 엔진이라는 점에서 확 끌렸다.
게다가 무거운 다른 엔진과 달리 가볍고 배포도 쉽다는 점은 내가 만드려는 게임과도 잘 맞았고, 노트북에서도 개발하기 쉽다는 것도 내게 중요했다. 이러한 점을 고려해 이번 게임 프로젝트의 엔진은 LOVE2d로 결정했다.
일단 1차 목표는 과거 윈도우 지뢰찾기의 재구현이다. 어머니가 가끔 심심하실 때 이 지뢰찾기를 아직도 하신다. 그런데 칸이 너무 작아 마우스가 흔들리거나 실수하면 그 옆의 엉뚱한 칸을 클릭하게 된다고 불평하신다. 웹 페이지에서 돌아가는 여러 지뢰찾기 사이트들은 느리고(아마 자바스크립트 때문이리라...) 브라우저를 켜야해서 번거로워 하신다. 내가 직접 더 큰 화면의 스탠드 얼론 exe 파일인 지뢰찾기를 만들어 어머니 컴퓨터의 지뢰찾기를 대체하는 것이 목표다.
'IT > 게임 제작' 카테고리의 다른 글
LOVE2d 게임엔진으로 지뢰찾기 만들기(2) - Lua 집중탐구 (0) | 2024.03.05 |
---|