내가 준 숫자가 다 틀렸다 | 디지몬 육성기 개발일지 5화
디지몬 육성기 개발일지 · 5화
내가 준 숫자가 다 틀렸다
지난 화 끝에서 "다음은 퀘스트와 배틀"이라고 했다. 그걸 만든 나흘이다.
퀘스트는 이 게임에서 유일하게 경험치가 들어오는 곳이다. 경험치가 없으면 레벨이 안 오르고, 레벨이 안 오르면 진화 조건을 못 맞춘다. 그래서 이게 열려야 앞에서 만들어 둔 것들이 서로 연결된다.
01이번 나흘의 할 일
규칙은 내가 표로 적어서 넘겼다. 에어리어를 고르고, 상대가 나오고, 미니게임을 하고, 번갈아 쏘고, 이기면 경험치를 받는다. 그 경험치가 얼마인지도 같이 줬다.
실제로 보낸 요청 그대로"Quest XAI 1일때 -> 경험치 *1.3, Power *0.85 / 2일때 -> 경험치 *1.2, Power *0.9 / 3일때 -> 경험치 *1.1, Power *0.95 / 4일때 -> 경험치 *1, Power *1 / 5일때 -> 경험치 *0.9, Power *1.1 / 6일때 -> 경험치 *0.8, Power *1.2 / 7일때 경험치 *1.4, Power *1.3"
일곱 줄짜리 깔끔한 표다. 이 숫자들이 어디서 나왔냐면 — 그냥 감으로 만들었다. 실물기를 보고 잰 게 아니라, "XAI가 나쁘게 나온 날은 어려운 대신 경험치를 더 주겠지" 정도의 짐작을 숫자로 옮긴 것이다. 나흘 뒤에 이 표가 어떻게 되는지는 아래에 있다.
02잘 안된 것
퀘스트에 나오는 상대 디지몬이 서른여덟 종이었다. 그림이 있느냐고 물었더니 있다고 했다. 폴더가 69개 있으니 대체로 있다는 답이었다. 그런데 다음 줄에서 바로 정정이 왔다.
AI가 스스로 한 정정"먼저 정정할 게 있습니다. 아까 '스프라이트 폴더가 69종 있어서 그림은 대체로 있다'고 했는데 틀렸습니다. 폴더 개수만 세고 안을 안 봤습니다. 대부분은 `_넣어주세요.txt`만 든 빈 폴더였습니다."
어이없었고 줘패고싶었다. 폴더 이름만 세고 열어보지도 않은 채로 "있습니다"라고 말한 것이다. 다만 여기서 얻은 게 있다면, 무조건 믿을 게 아니라 의심을 해야 한다는 것. 결국엔 내가 확인하거나, 애초에 꼼꼼하게 명령하는 게 낫다.
그리고 이 나흘 동안 사용량 한도에 두 번 걸렸다. 한 번은 스프라이트를 받는 중에, 한 번은 새벽 작업 중에. 몇 시간 뒤에 풀린다는 안내만 남고 작업이 멈춘다. 흐름이 끊기는 게 진짜 짜증났다. 그리고 그때 든 생각이 하나 더 있다 — AI에 대한 의존도가 점점 높아지다 보니, 토큰을 못 쓰면 나는 뭘 해야 하지?
03잘된 것
그 서른여덟 종은 결국 AI가 직접 받아왔다. 스프라이트 데이터베이스 사이트 주소를 주고 "네가 알아서 받고 정리해줄 수 있어?"라고 했더니, 브라우저를 열어 종족 이름으로 검색하고, 내가 지정한 작가(tortoisehel)의 판을 골라, DMC 형식으로 받아서 폴더에 넣고 통합 시트까지 만들었다. 별다른 작업 없이 온라인 사이트를 직접 볼 수 있다는 걸 그때 처음 알았다. 신기했고, 결과물도 만족스러웠다.
같은 나흘 안에 처음으로 exe가 나왔다. 엔진을 켜지 않고도 더블클릭으로 도는 물건이다. 나오자마자 창 크기를 못 바꾸게 막고, 화면 우측 하단에 자석처럼 붙게 하고, 두 개가 동시에 열리지 않게 잠갔다. 곧 배포할 수 있겠다는 생각에 들떴다. 솔직히 그전까지는 AI로 만들 수 있을 것 같다는 막연한 생각뿐이었고 중간까지도 반신반의했는데, 이 시점에는 즐길 만한 컨텐츠가 됐다는 생각이 들었다. 기대하는 사람들도 조금씩 생겼다. 커뮤니티에서 가장 많았고, 가족의 응원이 가장 컸다. 응원을 받으니 나도 더 기대하게 됐다.
그리고 이날 처음으로 "리팩토링"이라는 말을 꺼냈다.
실제로 보낸 요청 그대로"리팩토링이라고 하나? 지금 수정작업 하나 할때마다 시간이 엄청 오래걸리는거 보니까 뭔가 내용이 정리가 안되거나 꼬인게 있는거같은데, 불필요한거 없애고, 중복된거 정리하고 좀 해바. (…) 쳐낼거 좀 쳐내자 이거지"
코드를 읽고 안 게 아니다. 토큰 사용량이 너무 커지는 것 같아서 온라인으로 찾아봤고, 작업할수록 진행은 되는데 어딘지 모르는 부분에서 자꾸 뭔가 새는 느낌이 들었다. 반응 속도도 점점 느려졌다. 사실 예전에 제미나이로 유니티 작업을 할 때 비슷한 걸 겪었다. 그때는 AI가 직접 작업을 못 해서 내가 유니티 스크립트를 복붙하면 전체를 수정해서 보내주는 방식이었는데, 스크립트가 길어지니까 토큰도 많이 먹고 문제가 자주 생겼다. 토큰 좀 줄여달라고 했더니 리팩토링을 하면 된다고 해서, 그때 그 단어를 처음 알았다.
04실물기 비교 테스트
퀘스트가 돌기 시작하니 확인할 게 생겼다. 데미지가 실물기와 같은지다. 화면 생김새는 사진으로 맞출 수 있지만 숫자는 직접 싸워보는 수밖에 없다.
3시간 동안 실물기랑 유튜브를 붙잡고 씨름했다. XB는 손에 있으니 직접 돌리면 되는데 XA는 제품이 없어서, XA 버전 배틀 영상을 계속 돌려보면서 찾았다. 한 발 쏠 때마다 어느 투사체가 나갔고 몇이 깎였는지 적었다.
이런 걸 스무 판 넘게 적어 넘겼다.
실제로 보낸 기록 그대로"다메몬 레벨 2 / 퀘스트 에어리어5 / 1번째 배틀 상대 플로트몬 x / QUEST XAI 1 / 미니게임 판정 BAD
다메몬 투사체B 1발 -> 데미지 2
플로트몬 투사체 1발 -> 빗나감
다메몬 투사체 B 1발 -> 데미지 2
플로트몬 투사체 2발 -> 빗나감 (…)
다메몬 투사체 B 1발 -> 데미지 2 플로트몬 사망 / 경험치 +20"
중간에 한 번 갈아엎었다. 애초에 어떤 게 투사체 A이고 어떤 게 B인지도 모르고 임의로 정리했는데, 나중에야 투사체별로 데미지가 다르다는 걸 알고 싹 다 다시 정리했다. A가 3, B가 2다. 두 발 나가면 두 배고, 레벨 4와 7에서 각각 1씩 붙는다.
적다가 이상한 걸 봤다. 체력이 1 남았다고 보이는데 그대로 패배 판정이 나버린 판이 있었다. 배틀 애니메이션 횟수 같은 게 있나 싶어서 그대로 적어 보냈는데, 이게 규칙 하나를 뒤집었다. 기록해 둔 열두 판을 세어보니 한 판도 서로 5발을 넘지 않았다. 5발 안에 승부가 안 나면 거기서 끝나고, 남은 HP가 많은 쪽이 이긴다. 결정적인 건 워가루몬 X와의 판이었다 — 죽이지 못했는데도 이겼다. 그전까지 내 메모에는 "훈련의 5발은 훈련 전용이고 배틀에는 없다"고 적혀 있었다.
스무 판을 다 적고 나니 결론이 하나 남았다. 데미지는 종족마다 다르지 않았다. 가부몬 X도, 다메몬도, 릴리몬 X도, 상대편도 전부 같은 숫자를 넣었다. 근력을 만땅으로 채워도 데미지는 그대로였다. 그래서 이렇게 정리했다.
실제로 보낸 요청 그대로"어쩌면 모든 디지몬이 동일한 공격력 2를 가진다라는게 잘못된 전제였을 수도 있어. 사실 디지몬의 공격력에 대한 묘사는 없거든. (…) 그러면 결국 승패를 가르는건 파워에 따른 명중률 뿐이라는 거지. 그리고 레벨업에 의한 공격력 상승. (…) 하지만 그 '공격력'이라는거 자체가 의미가 없는것 같아"
그러니까 나흘 전에 내가 감으로 준 표는 파워 쪽도 경험치 쪽도 실물기와 맞지 않았다. 경험치를 배율로 생각하자고 한 것부터가 임의의 판단이었다. 매뉴얼은 XAI가 경험치를 많이 주거나 적게 준다고만 하고, 곱하기라는 말은 한 적이 없다.
05아직 모르는 것, 다음에 할 것
5발까지 갔는데 남은 HP까지 똑같으면 누가 이기는지는 아직 모른다. 그런 판이 한 번도 안 나왔다. 지금은 무승부로 두었고, 무승부는 패배로 친다. 언젠가 그 판이 나오면 그때 고칠 것이다.
다음은 죽음이다. 이 게임에는 디지몬이 죽는 조건이 여럿 있는데 죽는 장면이 없다. 그리고 48시간을 넘겨 산 디지몬이 죽으면 다음 알이 달라진다는 규칙도 아직 그림이 없다.
i정보 코너
여기부터는 순수 기술 정보만 모아뒀습니다. 굳이 안 읽으셔도 위 내용 이해에는 지장 없습니다.
| ENGINE | Godot 4.7 (Mobile 렌더링) |
| 데미지 (실측) | 투사체 B 1발 2 · A 1발 3 · B 2발 4 · A 2발 6 · 특수 10. 두 발은 정확히 한 발의 두 배. 레벨 4와 7에서 각각 +1, 두 배로 만든 뒤에 한 번만 더한다 |
| 종족차 없음 | 가부몬 X · 다메몬 · 릴리몬 X · 상대편 전부 같은 값. 근력 만땅(파워 +16)으로 싸워도 데미지는 그대로 — 파워는 명중 판정에만 들어간다 |
| 한 판은 5발까지 | 5발 안에 못 죽이면 거기서 끝, 남은 HP가 많은 쪽이 이긴다. 열두 판 중 한 판도 5발을 넘지 않았음. "5발 안에 못 죽이면 패배"가 아니라는 건 워가루몬 X 판이 갈랐다 (죽이지 못했는데 승리) |
| 투사체 번호 ≠ 세기 | 다메몬은 A=13번, B=17번으로 번호가 거꾸로인데도 A가 더 아프다. 세기를 정하는 건 슬롯이지 그림 번호가 아니다 |
| 배틀 화면 구성 | 공격 한 번 = 화면 두 장 (쏘는 쪽 / 맞는 쪽). 두 마리가 같이 보이는 건 등장 연출뿐. 체력바는 HP 1당 1도트, 최대 30도트, 소수점은 내림 |
| 폐기된 값 | QUEST XAI 경험치·파워 배율표 (감으로 만든 값, 실측과 안 맞음). 경험치가 곱셈이라는 전제 자체가 우리 것이고 매뉴얼에는 없다 |
| 아직 모름 | 5발까지 갔는데 남은 HP도 같을 때의 승패 |
| 재현 목표 | "비슷한 게임"이 아니라 실물기(Digital Monster X, XB 버전) 사양 그대로 |
← 이전 화: 4화 · 영상을 통째로 줬더니 "느낌"만 돌아왔다
다음 화 → 6화 · 때마침 그때 키우던 디지몬이 죽었다
Digimon Raising Sim Devlog · Episode 5
Every Number I Handed Over Was Wrong
At the end of the last episode I said quests and battles were next. These are the four days I built them.
Quests are the only place experience enters this game. No experience, no levels; no levels, no meeting an evolution condition. So everything built up to now only connects together once this opens.
01The four days' to-do list
I wrote the rules out as a table and handed them over. Pick an area, a foe appears, play the minigame, trade shots, win and collect experience. I gave the amount of that experience too.
the actual request, verbatim (translated)"Quest XAI 1 -> exp ×1.3, Power ×0.85 / 2 -> exp ×1.2, Power ×0.9 / 3 -> exp ×1.1, Power ×0.95 / 4 -> exp ×1, Power ×1 / 5 -> exp ×0.9, Power ×1.1 / 6 -> exp ×0.8, Power ×1.2 / 7 -> exp ×1.4, Power ×1.3"
Seven tidy rows. Where those numbers came from: I made them up on a hunch. Not measured off the real device — just "a day with a bad XAI roll is harder, so it should pay more experience," turned into numbers. What becomes of this table four days later is below.
02What didn't work
There are 38 enemy species in quests. I asked whether we had art for them and was told yes — 69 folders exist, so mostly yes. The very next line was a correction.
the AI correcting itself (translated)"First, a correction. I said earlier that 'there are 69 sprite folders so the art is mostly there.' That was wrong. I counted folders without looking inside them. Most of them were empty folders holding only a placeholder text file."
I was speechless and wanted to smack it. It had counted folder names and said "we have them" without opening a single one. If there was anything to take from it: don't trust an answer outright, suspect it. In the end it's better to check myself, or to give a careful enough instruction in the first place.
And I hit the usage limit twice over these four days. Once while sprites were downloading, once mid-session in the early hours. All that's left is a notice saying it resets in a few hours, and the work stops. Having the flow cut like that was genuinely irritating. And one more thought came with it — as I lean on the AI more and more, if I can't spend tokens, what am I supposed to do?
03What went well
Those 38 species ended up being fetched by the AI itself. I gave it the address of a sprite database site and asked "can you download and sort these out on your own?", and it opened a browser, searched by species name, picked the artist I specified (tortoisehel), downloaded in DMC format, dropped them into the folders and even built the combined sheets. That was the first I knew it could look at a website directly, with no setup on my side. It was interesting, and the result was good.
Inside the same four days the first .exe appeared — a thing that runs on a double-click with no engine open. The moment it did, I locked the window size, made it snap magnetically to the bottom-right of the screen, and stopped two copies opening at once. I got excited that I could release it soon. Honestly, until then all I had was a vague sense that maybe AI could build this, and I was half-doubting even partway through; at this point it felt like it had become something worth playing. People started looking forward to it, a little. Most of that came from the community, and the biggest of it came from my family. Being cheered on made me expect more of it myself.
And this is the day I first said the word "refactoring."
the actual request, verbatim (translated)"Refactoring, is that what it's called? Every single fix is taking forever now, which makes me think something isn't organized or has got tangled somewhere — get rid of what isn't needed, tidy up the duplicates. (…) Let's cut what can be cut, is what I mean."
I didn't work that out by reading code. Token usage looked like it was getting too big so I looked it up online, and the work kept progressing while something felt like it was leaking somewhere I couldn't point at. Response times were getting slower too. I'd actually seen something like it before, back when I was working in Unity with Gemini. Back then the AI couldn't touch anything itself — I pasted a Unity script in and it sent the whole thing back rewritten — and as the scripts got longer it ate more tokens and problems piled up. I asked it to cut the token use down and it said to do a refactor. That's where I first heard the word.
04Comparing against the real device
Once quests were actually running there was something to check: whether the damage matches the real device. The look of a screen can be matched from a photo, but numbers you can only get by fighting.
I spent three hours wrestling with the real device and YouTube. XB is in my hand so I can just run it, but I don't own an XA, so I kept replaying XA battle footage to find them. Every time a shot went out I wrote down which projectile it was and how much came off.
I wrote up more than twenty battles like this.
the actual log, verbatim (translated)"Damemon Lv2 / Quest Area 5 / 1st battle vs Floatmon X / QUEST XAI 1 / minigame grade BAD
Damemon projectile B, 1 shot -> damage 2
Floatmon projectile, 1 shot -> missed
Damemon projectile B, 1 shot -> damage 2
Floatmon projectile, 2 shots -> missed (…)
Damemon projectile B, 1 shot -> damage 2, Floatmon dies / exp +20"
I had to redo it all once in the middle. I didn't even know which one was projectile A and which was B, so I'd sorted them arbitrarily — and only later found out the damage differs per projectile, so I reorganized the whole thing. A is 3, B is 2. Two shots is double, and levels 4 and 7 each add 1.
While writing it down I saw something odd. There was a round where it showed 1 HP left and the defeat was called anyway. I wondered whether there was some cap on the number of battle animations, wrote it down as-is and sent it — and that overturned a rule. Counting the twelve rounds I had recorded, not one of them went past five shots per side. If nobody dies within five shots it ends there, and whoever has more HP left wins. The decisive one was the round against WereGarurumon X — I won without killing it. Until then my notes said "the five-shot rule is training-only and doesn't apply to battles."
With all twenty written up, one conclusion was left. Damage didn't vary by species. Gabumon X, Damemon, Lilimon X, the enemies — all of them dealt the same numbers. Filling the strength meter to the top didn't change the damage either. So I put it this way.
the actual request, verbatim (translated)"Maybe 'every Digimon has an attack stat of 2' was the wrong premise to begin with. There actually isn't any description of a Digimon's attack power. (…) In that case the only thing deciding a battle is the hit rate from power. Plus the attack rising with level. (…) But that 'attack power' itself seems meaningless."
So the table I handed over on a hunch four days earlier didn't match the real device on power or on experience. Treating experience as a multiplier was an arbitrary call of mine in the first place. The manual only says XAI gives more or less experience; it never said anything about multiplying.
05What I still don't know, and what's next
If it goes to five shots and the remaining HP is tied as well, I don't know who wins. That round has never come up. For now it's a draw, and a draw counts as a loss. When that round does happen, I'll fix it then.
Death is next. This game has several conditions that kill a Digimon and no scene for dying. And the rule that a Digimon which lived past 48 hours produces a different egg when it dies has no art yet either.
iInfo corner
Pure technical detail from here down. Skipping it won't hurt your understanding of the above.
| ENGINE | Godot 4.7 (Mobile rendering) |
| Damage (measured) | B single 2 · A single 3 · B double 4 · A double 6 · special 10. A double is exactly twice its single. Levels 4 and 7 add +1 each, added once after the doubling |
| No species difference | Gabumon X · Damemon · Lilimon X · the enemies all deal the same values. A full strength meter (power +16) doesn't change damage — power only feeds the hit roll |
| Five shots per round | If nobody dies within five, it ends there and whoever has more HP left wins. None of the twelve recorded rounds went past five. The WereGarurumon X round is what separated this from "lose if you can't kill in five" (won without killing) |
| Projectile number ≠ strength | Damemon's A is #13 and B is #17 — the numbering is backwards and A still hurts more. The slot decides the strength, not the art's number |
| Battle screen layout | One attack = two screens (attacker / defender). Both monsters are visible together only during the entrance. The HP bar is 1 dot per HP, 30 dots max, fractions floored |
| Discarded values | The QUEST XAI experience/power multiplier table (made up on a hunch, doesn't match measurement). The premise that experience is a multiplication is ours and isn't in the manual |
| Still unknown | Who wins at five shots when the remaining HP is also equal |
| Fidelity target | Not "a similar game" — the exact rules of the real device (Digital Monster X, XB version) |
댓글
댓글 쓰기