altair의 프로젝트 일기

LOVE2d 게임엔진으로 지뢰찾기 만들기(1) - 발단 본문

IT/게임 제작

LOVE2d 게임엔진으로 지뢰찾기 만들기(1) - 발단

altair823 2024. 3. 5. 04:58

 최근 발라트로(Balatro)라는 게임을 플레이하고 있다. 구매한지 얼마 되지도 않았는데 벌써 중독적으로 빠져들었다. 

발라트로 플레이 화면

 한국어 번역이 부실해 관련 자료를 찾아보던 도중 문득 의문이 들었다. 이 게임은 어떤 엔진으로 만들었을까? 찾아보니 LOVE2d라는 엔진으로 만들었단다. 

 

GoBrewYourself's comment on "Trying to make a high score FEEL like a high score 🔥"

Explore this conversation and more from the IndieDev community

www.reddit.com

LOVE2d 엔진 홈페이지

 

 

LÖVE - Free 2D Game Engine

Hi there! LÖVE is an *awesome* framework you can use to make 2D games in Lua. It's free, open-source, and works on Windows, macOS, Linux, Android and iOS.

love2d.org

 

 예전에 객체지향 수업에서 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 파일인 지뢰찾기를 만들어 어머니 컴퓨터의 지뢰찾기를 대체하는 것이 목표다. 

 

Comments