포챔스 초보가 AI로 실시간 계산기 만들어서 마스터볼 등반하기
요즘 포켓몬 챔피언스가 모바일로 배포되고 엄청난 인기인데요. 스위치가 없는 저는 매번 포켓몬 배틀 영상으로만 보다가 드디어 실제로 참여할 수 있게 되었어요. 많은 분들이 저처럼 처음으로 배틀을 입문하게 되셨을 텐데요. 생각보다 알아야 되는게 너무 많아서 어렵더라구요.
이리저리 공부하다 보니, 여러 계산기 사이트들도 알게 되었어요. 근데 그러니까 계산기 없이는 게임을 못하는 지경에 이르렀습니다. 근데 계산기에는 스피드 계산 따로 하랴, 딜 계산 따로 하랴, 이 포켓몬 노력치가 내구에 들어갔을지 공격에 들어갔을지 머리가 너무 아프더라구요.
이번에 입문한 저는 룰도 잘 모르고, 메타도 모르고, 무엇보다 머리로 데미지 계산이 안 됩니다. 그런데도 마스터볼까지는 올라가 보고 싶었어요.
그래서 화면만 보면 계산을 대신 해주는 프로그램을 직접 만든 거예요. 비전공자가 AI(Claude) 도움까지 받아가며 만든 도구인데, 결론부터 말하면 — 이걸로 진짜 마스터볼을 찍었습니다.
오늘은 이게 뭐고, 어떻게 돌아가고, 실제로 어떻게 써먹었는지를 두 판의 실전으로 보여드릴게요.
포켓몬 배틀은 사실 ’계산 게임’이다
포켓몬 배틀 좀 해보신 분은 아실 거예요. 겉보기엔 “기술 누가 잘 찍나” 게임 같지만, 실제로는 매 턴 두 포켓몬 사이의 스피드와 딜을 푸는 계산 게임입니다.
- 내 기술로 상대가 한 방에 죽나?
- 상대 공격을 내가 버티나?
이게 풀리면 그 턴은 이긴 거고, 안 풀리면 그냥 찍기예요. 문제는 여기에 랭크업(나쁜음모·명상 같은 거), 날씨, 장막, 화상·마비 같은 보정이 겹치기 시작하면 — 사람이 그 짧은 제한시간 안에 암산하는 게 거의 불가능해진다는 겁니다.
저는 그걸 매번 감으로 찍다가 지는 게 너무 답답했어요. 그래서 그 계산을 대신 해주는 도구를 만들기로 했습니다.
그래서 만든 것
한 줄로 말하면 이렇습니다.
포켓몬 챔피언스(에뮬레이터) 전용 실시간 데미지 계산기 + 상대 세트 분석 오버레이.
게임 화면을 약 0.7초마다 캡처해서 → 지금 배틀 중인지 판단하고 → 명찰(이름표)을 보고 어떤 포켓몬인지 알아맞히고 → 그 포켓몬의 예상 세트·데미지·스피드·약점을, 랭크·날씨·상태이상 보정까지 반영해서 → 별도의 창에 실시간으로 그려줍니다.
게임은 그대로 두고, 옆에 이런 ’계산 도우미 창’이 하나 붙는다고 보시면 돼요.
게임 메모리를 건드리거나 조작하는 게 아니라 그냥 화면을 보고 있는 방식이라, 비교적 안전하고 범용적입니다.
어떻게 돌아가나 (원리)
비전공자 입장에서 최대한 쉽게 풀어볼게요. 핵심은 0.7초마다 한 바퀴 도는 루프입니다. 한 바퀴에 이 일들을 순서대로 해요.
- 화면을 캡처한다. 에뮬레이터 창을 찾아 스크린샷을 찍고, 게임 영역만 잘라 항상 같은 크기로 맞춥니다. 그래야 창 크기를 바꿔도 인식이 되요.
- 지금 배틀 중인지 판단한다. 처음엔 화면 색만 봤는데, 전체화면 연출이 자꾸 “결과 화면”으로 오인돼서 배틀이 끊겼어요. 그래서 “명찰(이름표)이 떠 있으면 무조건 배틀 중” 이라는 신호를 추가했더니 안정적이 됐습니다. (이런 게 직접 만들면서 배우는 부분이죠.)
- 포켓몬을 알아맞힌다. 명찰 부분을 잘라서 세 단계로 식별해요. ① 내가 예전에 직접 고쳐준 학습 데이터(최우선) → ② 없으면 Claude(AI) 비전으로 식별하고 그 결과를 학습으로 저장 → ③ 그것도 아니면 아이콘 이미지 매칭. 즉 AI는 “새 포켓몬을 가르치는 선생님” 역할이고, 한 번 배우면 다음부턴 AI 없이 로컬에서 잡습니다.
- 계산해서 패널을 그린다. 타입상성·STAB·급소·장막·날씨·화상/마비·랭크를 전부 반영합니다. 포켓몬 특유의 난수(0.85~1.0) 때문에 데미지는 최소~최대 범위로 보여줘요. 그래서 판단이 단순해집니다 — 확정 1방 = 최소값이 100% 이상, 버틴다 = 최대값이 100% 미만.
- 배너 문구를 읽는다(OCR). “특공이 올라갔다”, “비가 그쳤다”, “화상을 입었다” 같은 문구를 글자 인식으로 읽어 계산에 반영합니다.
- 승/패를 자동 기록한다. 결과 화면 색으로 이겼는지 졌는지 판단해 전적을 자동으로 쌓아요.
여기에 더해, 배틀이 시작되면 게임 화면과 분석 앱 화면을 각각 자동으로 녹화합니다(이 글의 이미지들도 다 그걸로 나온 거예요). OBS로는 “배틀 시작/종료에 맞춰 알아서 녹화”가 안 되는데, 이건 됩니다.
실전 1 — 계산기가 풀어서 이긴 판 (타부자고 vs 메가픽시)
말로만 하면 와닿지 않으니 실제 한 판을 보여드릴게요. 막판 1대1 상황입니다.
내 타부자고(강철/고스트) vs 상대 메가픽시(페어리/비행). 둘만 남은 막판.
여기 함정이 있어요. 서로가 서로의 약점을 찌릅니다. 내 골드러시(강철)는 메가픽시(페어리)에게 2배, 상대 화염방사(불꽃)는 타부자고(강철)에게 2배. 그냥 보면 “누가 먼저 죽이냐” 단순 싸움 같지만, 암산으론 답이 안 나옵니다. 그래서 앱한테 물어봤어요.
판단 1 — “골드러시로 한 방에 죽나?”
전체 창에서 타부자고 쪽만 떼서 보면 이래요. 골드러시 → 메가픽시 89~104%(2배), 속도는 106 vs 90으로 내가 더 빠름.
89~104%가 핵심입니다. 최대 104%라 운이 좋아야 한 방이고, 낮은 난수가 뜨면 못 잡아요. 확정이 아니라는 게 문제. 못 잡으면 다음에 화염방사를 맞고 제가 위험해집니다.
판단 2 — “그럼 상대 화염방사는 내가 버티나?”
상대 메가픽시의 화염방사. 강철 타입 타부자고에게 2배로 꽂힌다.
들어오는 공격 칸만 보면 화염방사 96~114%. 최대치가 100%를 넘어서, 운 나쁘면 죽을 수도 있는 아슬아슬한 수치였어요.
숫자만 보면 “이거 죽는 거 아냐?” 싶죠. 그런데 실제로는 —
화염방사를 맞고도 HP 37로 생존. 낮은 난수가 떠준 덕에 아슬아슬하게 버티면서 마지막 기회를 잡았다.
결말 — 골드러시로 마무리
살아남은 타부자고의 골드러시가 메가픽시를 그대로 쓰러뜨렸다.
| 계산 | 앱 표시 | 실제 결과 |
|---|---|---|
| 골드러시 → 메가픽시 | 89~104% (2배) | 높은 난수로 명중, 마무리 ✓ |
| 화염방사 → 타부자고 | 96~114% (2배) | 아슬아슬하게 버팀, HP 37 생존 ✓ |
게임만 보면 그냥 한 판이지만, 앱과 같이 보면 “이게 왜 도박이었고 어떻게 버텼는지”가 숫자로 보입니다. 감으로 찍었으면 화염방사에 그냥 죽었을 수도 있는 판이었어요.
실전 2 — 앱이 틀렸습니다. 근데 그게 무기가 됐어요
솔직하게 가야겠죠. 이 앱은 “추정” 으로 시작합니다. 상대의 도구·노력치는 실제로 알 수 없으니 사용률 통계로 예측해서 보여줘요. 그래서 틀릴 수 있습니다. 이 판이 그 단점과, 그걸 극복하는 법을 동시에 보여줍니다.
단점 ① — 몰드류: 아이템 예측이 빗나가다
*몰드류(상대)와 메가번치코(나)가 같이 뜬 화면. 앱은 몰드류 도구를 사용률 1순위 ‘구애스카프’(37%)로 봤고, 그 가정대로면 속도가 **나 152 vs 상대 231 → “상대가 빠름”*으로 표시된다.
스카프 가정이라 앱은 몰드류가 더 빠르다고 봤어요. 그런데 실제로는 기합의띠였습니다. 스카프 보정(1.5배)이 없으면 몰드류는 154 정도, 게다가 번치코는 가속으로 스피드가 계속 오르는 특성이라 — 실제로는 번치코가 더 빨랐어요.
번치코의 플레어드라이브로 몰드류를 먼저 잡았다. 아이템 표시는 “제일 많이 쓰는 것”일 뿐 100%가 아니다.
단점 ② — 누리레느: 노력치 추정이 빗나가다
번개펀치 칸만 확대한 모습. 누리레느를 공격형으로 추정해서 번개펀치 91~107%(2배, 거의 한 방)로 높게 떴다.
그런데 실제로 맞은 건 훨씬 약했어요. 누리레느가 내구 투자형이었다는 뜻이고, 다시 계산하면 59~70%였습니다. 여기서 중요한 포인트 — 내구에 투자했다는 건 스피드를 안 줬다는 거예요. 앱은 최속(112)으로 봐서 “누리레느가 빠름”이라 했지만, 실제 내구형(80)은 제 타부자고(106)보다 느렸습니다.
교훈: 노력치도 추정이라 빗나갈 수 있다. 단, “앱보다 약하게 맞았다”는 사실 자체가 정보예요. 거기서 “상대가 내구형이고 느리다”를 역산할 수 있습니다.
강점 — 마지막엔 계산대로
마지막 상대 메가찌르호크. 이번엔 입력이 정확해서 계산이 딱 맞아떨어졌다.
나쁜음모 +2를 쌓고 쓴 10만볼트는 메가찌르호크에게 129~152% = 확정 1방(전기 vs 비행 2배). 계산대로 쌓고 한 방에 끝냈어요. 반대로 상대 블레이즈킥은 제게 한 방당 45~53%라, 운 나쁘게 두 번 약하게 맞아도 안 죽는다는 걸 미리 알고 받아낼 수 있었습니다.
정리하면 이 한 판이 앱의 본질을 보여줘요. 추정(아이템·노력치)은 틀릴 수 있지만, 실제 결과를 보고 보정하면 오히려 상대 세트를 역으로 읽는 무기가 되고, 입력이 맞은 계산은 정확합니다. 한마디로 “맹신하지 말고, 시작점으로 쓰고, 실제로 보고 보정하라.”
솔직한 한계 (자랑만 하면 안 되니까)
- 상대 세트는 어디까지나 추정. 아이템·노력치가 빗나가면 속도·데미지가 틀릴 수 있어요. (위 몰드류·누리레느 사례)
- OCR 의존 이벤트(랭크·날씨·상태이상·장막)는 게임 문구나 인식 품질에 따라 놓칠 수 있어요. 그래서 수동 버튼으로 보완하게 해뒀습니다.
- 일부 기술 데이터 누락 가능. (예: 블레이즈킥이 데이터에 없어 위력을 임시값으로 계산)
- 포켓몬 챔피언스 + 특정 에뮬레이터 환경에 맞춰져 있어요.
이런 한계를 알고 쓰면, 오히려 “앱은 이렇게 말하는데 실제론 다르네 → 그럼 상대는 이런 세트구나” 하고 더 잘 쓸 수 있습니다.
마무리
처음엔 그냥 “포켓몬 좀 이겨보자”였는데, 만들다 보니 배운 게 훨씬 많았어요. 화면을 인식하고, AI한테 모르는 걸 물어보고 그 답을 학습으로 저장하고, OCR로 글자를 읽고, 난수까지 반영한 데미지 공식을 코드로 옮기고… 생각보다 오래걸렸네요.
진짜로 찍은 마스터볼 랭크. 음하하
게임만 보면 그냥 한 판이지만, 이 앱이랑 같이 보면 “왜 이겼는지 / 왜 졌는지”가 숫자로 보여요. 저한텐 그게 제일 재밌는 부분이었습니다.