그린툰 최신 접속주소바로가기
100% 동네 섹파 구하기 바로가기 [AD]토토커뮤니티 NO.1 먹튀검증 토토사이트 추천 바로가기

49회 - 퀘스트 엔진(1)

타다다다다닥.

탁탁. 타다다다닥.

이진수의 손가락이 평소보다 빠르게 움직였다. 그 위에 황제국의 키보드 소리가 얹어져 이중창을 이뤘다.

두 사람은 게임 엔진 제출을 위해 막바지 작업 중이었다. 그들은 게임 엔진을 기말고사 전까지 완성할 수 없다는 데 동의했다. 그래서 어디까지 만들어 제출할 것인지를 놓고 토론을 벌였다.

황제국이 맡은 코어 시스템은 거의 완성되어 있었다. 하지만 코드 최적화와 버그 잡기에 신경 쓰려면 아직 시간이 더 필요했다. 여기에 사운드와 네트워크 시스템은 프로토타입 제작을 위해 기초 작업만 해 놓은 상태였다.

이진수는 렌더링 엔진은 거의 완성했다. 하지만 물리 엔진과 애니메이션 엔진은 아직 갈 길이 멀었다. 특히 중간에 홀딩한 물리 엔진은 손봐야 할 곳이 많았다.

그런데 물리 엔진 작업을 다시 시작했다가 문제가 발생했다. 새로 작업한 빌드를 엔진에 올리자 충돌 감지에서 에러가 속출했다. 분명 벽으로 막혀 있고, 문이 아닌데도 그냥 통과하는 일이 일어났다.

더 큰 문제는 피격 판정이었다. 이진수는 사실적인 그래픽만큼 사실적인 물리 엔진을 원했다. FPS 게임인 만큼 총알에도 탄도학을 적용해 총알이 날아가는 시간과 거리에 따라, 중력을 고려해 총알의 속도를 결정했다. 그가 이록 캐릭터를 선택했을 때 스나이퍼 모드에서 조준에 애를 먹었던 이유기도 했다.

탄도학을 적용하면 사실적인 표현이 가능하지만, 그만큼 컴퓨터가 해야 할 연산이 늘어난다. 그런데 충돌 감지에서 에러가 발생하자 판정에도 문제가 발생했다.

테스트를 위해 일부러 앞에 세워놓고 쐈는데도 총알이 맞지 않거나, 반대로 총알이 빛보다 빠르게 날아가면서 모든 것을 뚫고 파괴하는 이상한 에러가 발생했다.

“와, 이건 완전 신의 탄환이네요.”

네트워크 테스트 중 황제국이 쏜 총알이 벽 뒤에 숨은 이진수를 헤드샷으로 잡아 버리자 두 사람은 사태의 심각성을 인식했다. 더 이상한 점은 매번 에러가 발생하는 게 아니라는 점이었다. 어떨 때는 멀쩡하다가, 어떨 때는 문제가 생겼다.

나아져야 할 빌드에서 버그가 계속 튀어나오자 이진수는 예민해졌다. 제출 시간은 다가오는데, 왜 문제가 발생하는지 차분히 시스템을 뜯어 볼 시간은 부족했다. 이진수는 대신 자기 입술을 물어뜯었다.

황제국도 이 문제를 어찌할 지 고민했다. 지금까지 만든 게임 엔진도 아주 훌륭했다. 그런데 충돌 감지 때문에 혁신적인 게임 엔진이 갑자기 코미디처럼 느껴졌다.

결국 황제국은 특단의 조치를 내렸다.

“선배님, 어쩔 수 없어요. 과제로 제출할 때는 판정을 히트 스캔(hit scan, 탄환 발사와 동시에 과정을 무시하고 즉각 피격 판정을 내리는 방식)으로 해요.”

“그, 그건······. 그건.”

이진수는 진심으로 괴로워하면서 입술을 찌그러뜨렸다. 자기가 만든 프로그램에 누구보다 자부심이 강한 이진수였다. 아무리 도전적인 과제라도, 아무리 과제 제출용이라고 해도, 기능을 한 단계 낮추는 것은 그의 자존심에 상처를 입혔다. 황제국이 그를 설득했다.

“선배님 마음은 저도 이해해요. 하지만 FPS 게임 엔진에 피격 판정이 왔다 갔다 하면 나머지가 아무리 뛰어나도 냉정하게 말해 자격 미달이에요. 나중에 할 수 있지만 시간 때문에 기능을 잠시 빼는 거랑 기능은 있지만 오류투성이 게임 엔진을 제출하는 것 중에 어느 쪽이 더 효과적인가요?”

“치익······.”

이진수는 윗니와 아랫니 사이로 증기 빠지는 소리를 내면서 양쪽을 놓고 계산을 시작했다. 프로토타입 이후 그는 ‘드드득’보다 증기 빠지는 소리를 낼 때가 많았다. 그가 망설이다 대답했다.

“다, 다른 총은 히트 스캔 OK. 하지만 스나이퍼만큼은 타, 탄도학을 적용하겠어. 내가 시간 안에 채, 채, 책임질게.”

“그렇게 망치~인 내 인생 책임져! 날 떠나고 너는 행복······.”

옆에서 다른 일을 하던 오종석이 ‘책임’이라는 말을 듣자마자 반사적으로 자리에서 일어나 안무와 함께 노타이틀의 노래를 불렀다.

분위기는 순간 손 쓸 수 없을 만큼 썰렁해졌다. 오종석은 몇 번 헛기침하고는 자리에 얌전히 앉았다. 그는 그래도 혼잣말처럼 조용히 노래를 끝까지 불렀다.

황제국과 이진수는 다시 주제로 돌아갔다. 이진수가 그렇게까지 말하는데 황제국도 더이상 말릴 수 없었다.

“알겠어요, 선배님. 그럼 그 부분은 선배님이 책임지고 해 주세요. 전 그럼 그사이에 최적화랑 버그 수정하고 있을게요. 사운드랑 네트워크 기능은 일단 두고 방학 때 보강하는 게 낫겠어요. 지금 손대 봐야 죽도 밥도 안 될 거 같아요.”

“고, 고마워.”

방향을 정한 이진수는 곧장 물리 엔진 소스 코드를 뜯어보기 시작했다. 그는 코드의 미로 속에서 충돌하는 명령어와 함수를 찾아 허우적거렸다.

그 옆에서 황제국 역시 게임 엔진의 코드를 한 줄이라도 간결하게 만들기 위해 코드를 검토했다. 프로그램은 오직 소스 코드에 적혀있는 대로 동작하고, 컴퓨터는 프로그램이 요구하는 대로 연산 작업을 처리한다. 코드를 간결화하면서 불필요하게 시스템을 잡아먹는 부분을 잡아내면 그만큼 속도도 빨라진다.

그렇다고 무턱대고 코드를 줄였다가는 멀쩡하던 프로그램에서 갑자기 에러가 속출할 수도 있다. 최적화 역시 신중하게 진행해야 한다. 뉴퀘스트의 두 프로그래머는 자기만의 세계로 들어가 셀프-크런치 모드에 돌입했다.

기말고사 기간이 되자 뉴퀘스트의 톱니바퀴도 잠시 멈췄다. 콘텐츠 파트는 각자 기말고사에 대비했다.

차현주는 기말에 제출해야 하는 정물화 작업이 밀렸다며 며칠 동방에 나오지 않았다. 오종석과 전유진은 동방에서 기말 대비 과제와 공부를 했다. 그들은 두툼한 전공 서적을 들고 와서 책상에 성벽처럼 쌓았다.

“동방 생기니까 참 좋다. 무거운 책 들고 도서관이나 빈 강의실 찾아다닐 필요도 없고.”

“와~, 누나 사전만 몇 개예요?”

“내년에는 나도 전자사전 하나 살까 봐. 팔 빠질 거 같아.”

“전자사전! 저도 부모님이 입학할 때 하나 사주신다는 거 게임기나 하나 사달라고 했다가 등짝 맞았는데.”

오종석이 전유진의 롱맨 영영사전과 옥스퍼드 영영사전을 넘겨보며 그 말에 동의했다. 오종석은 기업 경영 케이스스터디 기말 리포트를 게임 기업으로 잡고 잡지와 PC 통신, 인터넷을 이 잡듯 뒤졌다.

뉴퀘스트는 잠시 프로젝트를 잊고 각자의 방식으로 기말 기간을 보냈다. 어느새 따뜻한 봄기운은 뜨거운 여름에 밀려나고 있었다.

황제국과 이진수는 며칠을 집에도 가지 않고 동방에 머무르며 게임 엔진을 다듬었다. 밤이면 둘은 동방 소파에 순서를 정해서 잠깐 눈을 붙였다.

불침번을 서듯 이진수가 누운 후 2시간이 지나면 황제국이 깨워 그 자리에 눕는 식이었다. 게임 엔진의 코드가 늘었다 줄었다를 반복하는 사이, 두 사람의 책상에는 빈 박카스와 캔커피가 계속 늘어났다.

“안 되겠다. 여름을 위해 선풍기와 냉장고를 사야겠어요.”

“그, 그거 좋은 생각이야.”

새벽이 되면 두 사람은 교내 헬스장으로 가서 몰래 도둑 샤워를 하고 나왔다. 원래 헬스장에 등록한 사람만 샤워를 할 수 있었지만 7시 전에는 지키는 사람이 없었다.

샤워를 마치면 아직은 쌀쌀한 아침 공기를 맞으며 시험 기간에만 24시간 운영하는 매점에서 우유를 하나씩 샀다. 커다란 단지형 우유에 빨대를 꽂아 쪽쪽 빨아먹으며 둘은 털래털래 동방으로 돌아왔다.

평소에도 그렇지만 이때의 이진수는 거의 아무 말이 없었다. 그렇지만 황제국은 아무 말 없이 걷는 그 시간이 참 좋았다. 어쩐지 이진수와 많이 가까워진 느낌이었다.

그렇게 동방으로 돌아오면 책상에 쌓여있는 쓰레기를 치운 다음, 다시 맹렬한 코딩에 들어갔다. 이진수도, 황제국도 버그를 잡아내기 위해 집중 상태를 유지하려고 한 번 앉으면 일어날 줄을 몰랐다.

그리고, 엔진을 제출해야 하는 날 새벽, 마침내 이진수가 말했다.

“되, 되, 된 거 같은데···!”

“정말요?”

이진수가 고개를 끄덕였다. 황제국은 당장 이진수에게 데이터를 넘겨받아, 코어 시스템에 올리고 게임 엔진 빌드를 수정했다. 그리고 프로토타입용 기차와 마을 데이터를 불러와 실행시켰다.

과제 제출에 맞춰 좀 더 인간 형태에 가깝게 다듬어진 수수깡 인형이 30년대 만주식 마을에 소환되었다. 황제국은 일부러 건물마다 돌아다니며 부딪히며 다녔다. 충돌 엔진이 정상적으로 작동했다.

고개를 끄덕인 황제국은 곧 이진수와 네트워크 플레이를 진행했다. 두 사람은 대결이 아니라 오직 테스트를 위해 플레이를 시작했다. 황제국과 이진수는 각각 장건과 이록 캐릭터를 선택해 가상의 마을에 마주 섰다.

두 사람은 서로를 향해 총을 쐈다. 테스트를 위해 황제국만 쏘기도 하고, 이진수만 쏘기도 했다. 앞으로 달리면서 쏘고, 지그재그로 달리면서 쏘고, 뒷걸음질 치며 쏘고, 점프하며 쏘고, 온갖 방식으로 총을 쏘며 피격 감지를 테스트했다.

일반 총에 히트 스캔 방식을 적용하자 총을 쏘자마자 바로 반응이 왔다. 두 사람의 캐릭터가 수없이 피를 뿌리며 자리에 쓰러졌다. 어느 정도 테스트를 마치자 황제국이 이진수에게 말했다.

“스나이퍼 모드 테스트해 봐요, 형.”

“응, 으응.”

이진수가 작게 한숨을 쉬고는 다른 배경을 로드했다. 그가 물리 엔진 정교화와 피격 판정 확인을 위해 만든 사격장이었다. 사격장에는 사람 모양의 종이판과 맥주병, 컵, 의자 등 다양한 오브젝트가 놓여 있었다.

그는 먼저 총을 스나이퍼 모드로 바꿨다. 짧은 상자 모양의 총이 긴 상자 모양으로 바뀌었다. 이진수 머릿속에서 총이 변신하는 ‘철컥’ 소리가 들리는 것 같았다.

이진수는 뒤로 한참 물러났다. 그의 심장이 두근거렸다.

“······.”

이진수가 조준하는 동안 황제국도 긴장한 채 화면을 지켜봤다. 더이상 수정할 시간이 없었다. 반드시 성공해야만 했다.

탕!

강렬한 총성이 들리고, 퍽! 소리와 함께 갈색 맥주병이 산산조각 났다. 옆에서 지켜보던 황제국이 주먹을 불끈 쥐었다.

이진수는 천천히 늘어서 있는 물체들을 하나씩 저격 모드로 신중하게 조준해서 사격했다. 물체들이 여지없이 박살 났다. 발포와 파괴 사이에는 찰나의 차이였지만, 약간의 시간차가 있었다.

“성공인 거 같은데요?”

“그, 그런 거 같아.”

이진수는 안도의 한숨을 내쉬며 말했다. 황제국도 사격장을 소환해 테스트해 봤다. 탄도학이 적용된 스나이퍼 모드가 제대로 작동하고 있었다. 둘은 내친김에 네트워크 플레이를 실행해 똑같이 이록 캐릭터를 선택해 대결을 펼쳤다.

멀리 떨어져서 스나이퍼 모드로 총을 쏘고, 건물 옥상에 올라가서 땅에 있는 상대를 노리거나, 동시에 옥상에서 서로를 노리기도 했다. 그들은 할 수 있는 다양한 방식으로 제대로 작동하는지 확인했다.

“됐어요, 형!”

황제국이 기뻐하며 손을 들어 이진수에게 하이파이브를 요청했다. 이진수는 잠시 무슨 상황인지 생각하다가 어설프게 황제국을 따라 했다. 그가 천천히 손을 들자 황제국은 이진수의 손을 가볍게 때렸다.

짝! 소리와 함께 두 사람의 손바닥이 탄력 있게 부딪혔다. 이진수의 손바닥이 조금 얼얼했다. 그의 인생 첫 하이파이브였다. 그 감각이 이상할 정도로 선명했다.

황제국은 얼른 제출할 데이터를 정리했다. 게임 엔진과 프로토타입의 몇 가지 모드를 정리하고, readme.txt 파일(일종의 설명서)을 만들었다.

그가 리드미(readme.txt) 파일을 작성하다 멈칫했다. 그리고 이진수에게 물었다.

“엔진 버전을 몇이라고 하는 게 좋을까요?”

이진수는 잠시 머릿속으로 게임 엔진의 완성률을 따져봤다.

“대, 대략 70퍼센트 정도?”

“그럼 버전 0.7.”

황제국은 이진수의 말을 듣고 리드미 파일을 빠르게 작성했다.

[ ***** 퀘스트 게임 엔진(Quest Game Engine) v0.7 ***** ]

[ 프로그래머 1. 컴퓨터공학과 199610110 이진수 ]

[ 프로그래머 2. 컴퓨터공학과 199818991 황제국 ]

그런데 막상 제출하기 위해 데이터를 압축하려고 보니 용량이 너무 컸다. 게임 엔진보다 프로토타입을 위한 3D 데이터 용량이 컸다. 게다가 동방에 남는 디스켓도 몇 장 없었다. 데이터를 전부 담으려면 수십 장으로 모자라 보였다. 아직 USB도 없는 시절이었다.

“어, 어떡하지?”

“흠······. 어쩔 수 없네요.”

황제국이 게임 엔진 폴더를 F 드라이브 하드디스크에 몽땅 복사한 다음 컴퓨터를 껐다. 그리고 컴퓨터에서 하드디스크를 분리했다. 이진수 생각에도 가장 합리적인 방법이었다.

오류신고

아래 오류에 해당하는 버튼을 클릭해 주시면 빠른 시일내 수정작업이 이루어 집니다.

갓겜의 제국 1998 - 갓겜의 제국-49화
[49 / 총265]

갓겜의 제국 1998 - 갓겜의 제국-49화

연재 총 265화