이 글은 개인의 판단이며, 정확한 판단이 아닐 수 있으니 내용을 참고하여 판단하는건 개인의 몫임. 비판이나 옹호하거나 하는 등의 목적이 아님.
들어가기 전 요약
1. AI 완전 의존 코딩은 아닐 확률이 높다.(클래스나 매서드에 사용된 틀린 영어 단어, Move1, Move2 등의 간결한 네이밍, 고유한 습관적 네이밍(잘 사용되지 않는))
2. Unity 6를 기반으로 하고 있음에도 알고리즘이 정교한 수학적 모델링이나 머신러닝 라이브러리를 활용하지 않고, if-else나 goto를 이용한 노가다로 구현함
3. 1인 개발은 맞는 것 같다. (TheBackend, Photon Engine 사용 및 TMPro.Examples 같은 예제가 그대로 들어간채 배포되어있음)
4. 멀티와 서버와 상호 소통하는 게임임에도 보안이나 방어, 난독화가 사실상 전무함
5. 2012년생이 게임을 개발했단 것 자체는 대단한 성취라 생각하나, 내부 로직의 퀄리티와 하이레벨 프레임워크에 완벽하게 의존한것을 보아 "IQ204의 천재가 만든 게임" 이라고 보면 아쉬운 점이 없진 않음. 그러나 개발중인 사전 체험판이라니 어느정도 이는 감안.
-- 본론
전체적인 분석은 ll2cppDumper와 Dnspy, ghidra를 이용함.
1. 구조 및 설계
내부 구조는 전형적인 수평적 확장의 모습을 보임, OOP의 핵심인 추상화나 인터페이스를 통한 유연한 설계보다, 기능이 필요할때마다 기존 클래스를 복제후 수정하여 독립적으로 운영하는 방식으로 만들어짐
특히 클래스명이 Block1, Block2 ~ 와 Mode1, 2, 3 ~ 과 같이 클래스를 확장해 장기적 유지보수성보단 지금 당장의 기능 구현과 빠른 배포에 우선순위를 둔것으로 보임. 이는 팀 단위의 협업 결과물일 가능성은 절대적으로 낮으며, 1인 개발의 흔적으로 보임.
2. 코드 내 인적 지문
바이너리 전반에 고유한 명명 패턴과 반복적 오타, 영어 실력 부족은 개발자의 성향이 그대로 보임.
고유한 언어 습관으로 ~Super, ~Support, ~Puller 같은 독특한 접미사를 붙이는게 보임
Manger, Loob, Inturrupted, overrided등의 오타나 영어 실력 이슈가 그대로 남아 클래스의 이름으로 남아있음, 코드 리뷰 과정이 부재, 부족했거나 혹은 로직의 완결성을 우선시하는 1인 개발의 증거로 볼 수 있을듯 함.
3. 로직 구현
핵심 로직을 전체적으로 보았을때 하나같이 패턴은 “매우많은 노가다”와 “낮은 추상화” 임
요약에서도 말했듯 Unity 6를 사용함에도 내부 로직이 전부 방대한양의 if-else 조건문과 goto를 이용해 구현되어, 전부 수동적인 데이터 검증과 조건부 실행에 의존하고 있음. 최신 엔진을 사용함에도 오래된 로직 구현 방식을 사용하는걸 보아 인터넷에서 영문 자료나 최신 자료를 직접 찾아보았기보단, 한국어 자료나 오래된 코딩 자료, 블로그 등을 참고한것으로 보임.
4. 게임으로서의 평
단 한문장으로 정리 가능하다. “Done is better than perfect” 를 완벽하게 지킨 게임. 기능적 완성은 완료되어 유저가 플레이하는것에는 지장이 없는 상태임
그러나, 구조적 완성은 “Done is better than perfect” 에서 말하는 Done보다 낮은듯함, 아까 언급한 Block1, 2, 3식의 클래스 나열은 확장성을 사실상 포기한것으로 보임.
보안은 사실상 전무함, 리버스 엔지니어링이나 치팅이란게 존재하지 않는다 생각한 사람이 만들법한 구조임. BlockBlindTank, multiplierAttackNorm 등의 이름을 그대로 남겨두었으며, 클라이언트 의존성이 매우 과다함. 핵심 물리 연산이나 데미지 계산 로직 등 중요한 부분들이 전부 클라이언트에 의존하며, 서버는 클라이언트가 쏴준 결과값을 받아적는 구조로 추정됨.
리버싱을 처음 하는 사람조차 뜯어서 치팅을 할 수 있을법한, AssaultCube 보다 더욱 더 쉬울듯함.
인디 게임 시점에서의 종합적인 평가로는, 긍정적으로 보았을때 2012년생이 혼자 이정도 결과물을 냈다면 실행력과 높은 집념에 아주 높은 점수를 주고자 함
그러나, 부정적으로 보았을때 IQ204라는 말에 비해, 코딩의 지능적 설계가 아쉬웠다고 생각함, 지금의 코드는 단순 반복 노가다와 시간을 때려박아 만든 코드이며, 보안과 아키텍처를 무시한 개발은 결국 단발성 프로젝트로 끝날 수 밖에 없음.
그러나, 이는 경험이 부족해서 발생할수도 있는 과정이기에, 이것만 보아서 “못했다” 라고 평할수는 없을 듯하며, 긍정적인 측면만 보고 만일 내 학생이라면 칭찬을 해줄 듯 함.
유니티 mono는 워낙 허벌짝이라 다 보이는게 문제지
il2cpp인데도 저리 다 보이더라
넘나 잔인한 것 ㅇ ㅅㅇ;
사전 체험판으로 올려놨을때 한번 대여봐야지, 영상에서 자기 입으로 1인 개발임에도 대형게임사 게임과 맞먹는 컨텐츠와 스케일이라길래 조금 더 잔인하게 쓰려다가 말았어
근데 천재랑 지식의 양이랑 다른데 12년생이면 저거 혼자 만들 수 있단게 대단한거같긴해
그래서 그거 감안하고 쓴거긴함, 천재라 하던것에 비해 로직 구현이 좀 아쉬웠다 말고는 딱히 별게 없어서
완성시켰다는 근성부터 12년생을 뛰어넘긴한듯
치팅은 결국엔 통계로 해결해야 한다곤 생각함ㅇㅅㅇ
까는글 ㄷㄷ
이게 그 박사학위 받으려는 대학원생이 교수 앞에서 꿀먹은 벙어리 된다는 그 상황인가 80대 초기 게임같이 컬이나 재미 하나도 없어서 오분하다 껐는데 애둘러서 글썼네ㅋㅋ 그래도 나오자 마자 파묘는ㅜㅋㅋㅋ 전문가들이 이래서 무서워ㅋㅋ
그래도.. 어린애니까 최대한 순화..
이 댓글은 게시물 작성자가 삭제하였습니다.
유니티 6 내용은 게임쪽은 정보가 부족해 틀린 부분이 있는 것 같으니 배제하고 봐주시고(부족한 정보를 분석글에 포함하여 죄송합니다.), 새로 나온 게임을 왜 분석하고있냐? 라고 물으신다면 IQ204가 만들었다고 언론사들에서 말하는 것을 접하고, 댓글중 "AI로 만들었을게 뻔하다" 백강현씨가 직접 대규모 게임과 맞먹는 스케일과 컨텐츠라 언급하셔서 분석했습니
그리고 다른 갤로 글 퍼가지 말아주세요. 특정 인물을 비방하기 위한 목적이 아니고, 단순 분석글이니 제발 이상한곳에 퍼가지 말아주세요.
@ㅇㅇ(211.234) - 작성자 올림