← 모든 글

옛 포켓몬 게임을 빌리지 않고 기리는 법

『금·은·크리스탈』은 플레이어가 걷는 모든 걸음을 하나의 루틴으로 처리합니다. 그 루틴이 256걸음마다 지닌 알을 부화 쪽으로 한 칸 옮기고, 512걸음마다 지닌 포켓몬의 친밀도를 올리고, 4걸음마다 독에 걸린 포켓몬에게 피해를 줍니다. 『에메랄드』는 나무열매를 실시간 시계로 4단계에 걸쳐 키우는데, 심은 뒤 열매가 열리기까지 4~96시간이 걸립니다. 그리고 두 단어짜리 말 한 마디를 하루에 5포인트씩 흔들며 세이브에서 세이브로 퍼뜨립니다.1234 이것들은 메커니즘이고, 오마주가 간직해도 되는 것은 메커니즘입니다. 간직해서는 안 되는 것은 기록이 말해 줍니다. 이 기록에서 2016년부터 2024년 사이에 내려갔거나 삭제 통지를 받고 거둬들여진 팬 게임, 툴킷, 포럼은 하나같이 포켓몬 자체의 이름, 아트, 코드 위에 만들어졌거나 그런 게임으로 링크를 걸고 있었습니다.5678 그리고 메커니즘을 두고 다툰 유일한 사건, 2024년 9월 18일 도쿄에서 제기된 Palworld 소송이 근거로 삼는 특허의 청구항은 포획 아이템을 조준해 던지는 것, 포획 가능성 표시, 또는 공중에서 탈것 캐릭터에 올라타는 것을 요건으로 합니다.910111213 그래서 저는 네 개의 디컴파일을 시스템을 보려고 읽고, 청구항과 법원 관련 보도를 선을 보려고 읽은 뒤, 저희 앱 Kiradex를 위한 브리프를 썼습니다. 걷기, 시계, 카드, 일방통행 턱, 주간 홀, 퍼져 나가는 말 한 마디는 간직하고, 그 모든 픽셀과 단어와 숫자는 직접 그립니다.

TL;DR

  • 걷기가 화폐였습니다. 두 엔진 모두 필드의 모든 걸음을 하나의 함수로 보내고, 알, 친밀도, 독, 스프레이, 사파리존, 재대전이 모두 그 함수에 귀를 기울입니다. 박자는 굵고(4, 128, 256, 512걸음) 그래서 보상은 사건으로 찾아옵니다. 예산은 초가 아니라 걸음으로 쓰입니다. 사파리존 한 번에 500걸음, 세 가지 스프레이에 100, 200, 250걸음입니다.1214151617
  • 시계가 한 주에 모양을 주었습니다. 『크리스탈』은 하루를 4시, 10시, 18시에 자르고, 벌레잡기대회를 화요일, 목요일, 토요일에 20분씩 열고, 매주 금요일 럭키 넘버를 뽑아 가진 모든 포켓몬과 대조하고, 일일 플래그 16개를 자정에 초기화합니다. 『에메랄드』는 날짜가 바뀌면 열한 가지 갱신을 돌리고, 돌아왔을 때 흐른 분(分)으로 나무열매를 키웁니다.18192021223
  • 지위는 누군가에게 보여 주는 것이었습니다. 『에메랄드』의 트레이너 카드는 별 네 개가 하나씩 늘 때마다 색이 바뀌고, 별마다 다른 종류의 플레이를 뜻합니다. 박스 하나는 6×5 격자에 30마리를 담습니다. 배틀프런티어의 타워, 팰리스, 아레나, 팩토리 도전은 7전(돔 토너먼트는 4전, 튜브는 14개 방, 피라미드는 7개 층)이고, 배틀타워의 프런티어 브레인은 연승의 35번째와 70번째 배틀입니다.232425
  • 다른 사람의 세계가 내 세계에 도착했습니다. 기록 교환(record mixing)은 세이브 사이에서 5,188바이트를 복사합니다. 비밀기지 20곳, TV 방송 슬롯 25개(그중 20개는 이 방법으로만 도착하는 방송 전용), 유행어(trendy phrase) 5개, 그리고 배틀타워 기록입니다. 플레이어 다섯 명 중 한 명은 유행을 좇는 사람(Hipster)과 함께 시작하며, 그는 도착할 때마다 숨겨진 단어를 하나씩 가르쳐 줍니다.262728
  • 저작권, 상표, 특허는 서로 다른 세 개의 선입니다. Uranium 개발자들은 2016년에 아무도 직접 연락해 오지 않았다고 말했고, 삭제 통지를 받은 뒤 게임을 내렸습니다. Prism은 2016년 12월 21일에 중지 요청서를 받았습니다. Relic Castle은 2024년 3월, DMCA 통지가 있었다는 보도 뒤에 오프라인이 되었습니다. 특허 사건은 Palworld 하나뿐이며, 2025년 11월에 게임의 구버전으로 좁혀졌고, 금지명령은 여전히 청구되어 있으며, 2026년 10월 4일 기준으로 판결은 보도되지 않았습니다.5682930
  • 트리뷰트 게임들은 장르를 지키고 이름을 버렸습니다. 제가 확인한 트리뷰트 게임 여섯 편과 Palworld의 Steam 스토어 설명 가운데 “Pokémon”이라고 쓴 것은 하나도 없습니다. 개발자들은 인터뷰에서는 영향을 받은 대상으로 그 이름을 자유롭게 말합니다.3132
  • 이것이 Kiradex에 주는 것. 빌드가 아니라 브리프입니다. 광장을 256걸음 걸을 때마다 자라는 창턱의 화분, 앱 자체의 시계로 도착하는 아침 상자, 수집가 카드의 별 네 개, 루트 위의 일방통행 턱(결정은 고저와 루트를 다룰 글에서 합니다), 주간 홀 참가 일곱 번마다 받는 로제트, 그리고 광장에서 광장으로 퍼지는 두 단어짜리 말 한 마디. 각각에는 닮아서는 안 되는 것과 테스트가 실행할 수 있는 확인을 붙였고, 앱이 결코 해서는 안 되는 일의 목록도 붙였습니다. 읽은 특허는 네 건이고, 걸음 수 카운터나 시계에 관한 특허 조사는 하지 않았으며, 변호사와 상담하지도 않았습니다. 이것은 한 개발자의 해석이지 법률 자문이 아닙니다.33

1. “그 느낌”은 무엇으로 만들어졌고, 어떻게 측정했는가

이 글은 『레드』, 『금』, 『루비』에 나오는 생물에 관한 글이 아닙니다. 그 주변의 순간들에 관한 글입니다. 집에 가는 길에 부화한 알, 금요일의 라디오 방송, 금색으로 바뀐 카드, 통신 케이블로 놀았던 오후 뒤에 내 게임에 나타난 친구의 비밀기지. 그런 순간들은 시스템이고, 이 글이 다루는 것은 시스템입니다. 이 시리즈의 앞선 글들은 타일, 사람, 건물을 측정했습니다. 이번 글은 카트리지가 꺼져 있는 동안에도 주머니 속 세계를 살아 있다고 느끼게 한 루프를 측정하고, 이어서 그 게임들을 사랑한 작품들을 둘러싼 법적 기록을 읽고, 마지막으로 저희 마을이 빌려도 되는 것과 빌려서는 안 되는 것을 적습니다.343536

Kiradex는 카드 스캐너이고, 그 옆에 픽셀 마을 Kiradex World가 있습니다. 16픽셀 타일로 된 광장에서 수집가들이 걸어 다니고, 미리 준비된 대사를 말하고, 자기 카드를 보여 줍니다.34 이 앱이 스캔하는 것은 진짜 포켓몬 카드이고, 그렇기 때문에 이 글은 조심스러워야 합니다. 이 조사보다 먼저 쓰인 앱 자체의 규칙은 이미 “nothing of theirs in the world”(세계 안에 그들의 것은 아무것도 두지 않는다)라고 정해 두었습니다. 생물도, 트레이너도, 포획 도구도, 체육관이나 배지 디자인도, 음악도, “포켓-“으로 시작하는 이름도 없습니다.37 이 글이 답하는 것은 그다음 질문입니다. 그토록 많은 수집가가 그 안에서 자란 게임들로부터 저희 같은 마을이 무엇을 가져와도 되는가, 그리고 그것을 어떻게 아는가.

방법

전반부는 위키가 아니라 소스에서 읽었습니다. 포켓슬론에 관한 한 문단만 예외이며, 그 문단에는 그렇게 밝혀 두었습니다. pret 프로젝트는 게임보이와 게임보이 어드밴스 게임의 디컴파일을 관리합니다. 각 게임을 다시 빌드하는 C와 어셈블리이며, README에는 재현하는 모든 ROM의 SHA-1이 적혀 있고, 게임의 상수에는 이름이 붙어 있으며, 군데군데 리버스 엔지니어링을 한 사람들의 주석이 달려 있습니다. 저는 그중 네 개를 각각 master 브랜치의 커밋으로 얕은 클론을 떠서 썼습니다. pokered는 d2704a6(2026년 9월 22일 커밋), pokecrystal은 5beda23(9월 29일), pokeemerald는 731ad5b(10월 1일), pokefirered는 037335f(9월 26일)입니다.38 스크립트 measure_systems.py는 2절부터 6절까지 인용하는 모든 상수를 파일과 줄 번호와 함께 출력하고 개수를 도출합니다(나무열매 43종의 단계별 시간, 전화와 재대전 슬롯, TV 방송 종류, 일일 플래그). 두 번째 스크립트 measure_map_features.py는 『에메랄드』의 모든 맵을 돌며 각 레이아웃의 셀을 타일셋의 속성 테이블과 대조해, 턱, 자전거 전용, 긴 풀숲 셀과 풀베기로 자를 수 있는 나무를 맵 종류별로 셉니다.3839 이 두 스크립트에서 나온 숫자는 측정값입니다. 무엇이 언제 발동하는지에 대한 설명은 그 숫자들이 가리키는 코드 경로에 대한 제 해석입니다. 디컴파일에 주석이 있는 곳에서는 그 주석이 설명하는 코드도 읽었습니다. 둘이 어긋날 수 있기 때문입니다. 『크리스탈』의 걸음 루틴에서 호출하는 쪽의 주석은 256걸음마다 친밀도가 오른다고 하지만, 호출되는 루틴은 두 번에 한 번만 동작합니다. 그래서 2절은 코드를 따릅니다.2 『루비·사파이어』는 클론에 없습니다. 이 글이 그 게임들에 대해 말하는 부분은 『루비』나 『사파이어』의 세이브를 해석하는 『에메랄드』와 『파이어레드』의 코드에서 읽은 것입니다.23

후반부는 2026년 10월 4일에 가져와 저장했습니다. Nintendo와 The Pokémon Company 자체의 보도자료와 규정 페이지, Pocketpair의 공지, Google Patents에서 가져온 일본 특허 세 건과 미국 특허 한 건(일본 청구항은 Google의 영어 기계 번역과 함께, 미국 청구항은 특허 자체의 영어로), 트리뷰트 게임 여섯 편과 Palworld의 Steam 스토어 기록, 그리고 날짜가 있는 이름 있는 매체의 보도입니다. 7절부터 11절까지의 각 주장에는 문서나 매체를 출처로 달았습니다. 페이지에 접근할 수 없었던 경우에는 그렇다고 적었습니다. 제가 결론을 끌어낸 곳에는 제 결론이라고 표시했습니다.

이 글의 어떤 내용도 법률 자문이 아닙니다. 저는 문서를 읽은 개발자이며, 이 가운데 어느 것에 대해서도 변호사와 상담하지 않았고, 읽은 것은 특허 네 건이지 두 회사의 특허 포트폴리오 전체가 아닙니다.

이 글 뒤에 있는 조사는 Kiradex 저장소에 있는 조사 자료집(dossier)으로, 모든 사실에 URL이, 스크립트가 낸 모든 숫자에 [measured] 태그가 붙어 있습니다. 이 글은 그 자료집을 읽을 수 있게 만든 것이고, 14절은 그 브리프입니다.33

2. 걸음 수 카운터: 걷기가 화폐였다

휴대용 게임기의 플레이어에게는 결코 멈추지 않는 동사가 하나 있었습니다. 두 엔진 모두 그것을 하나의 함수로 보내고, 나머지 모든 것이 그 함수에 귀를 기울입니다. 이 두 함수를 읽는 것이 옛 게임의 생명이 얼마나 많이 걸음으로 지불되었는지를 보는 가장 빠른 길입니다.

『금·은·크리스탈』: CountStep

『크리스탈』에서는 필드의 모든 걸음이 engine/overworld/events.asm의 CountStep을 거칩니다. 이 루틴은 통신 방에서는 건너뛰고, 대기 중인 특별한 전화나 스프레이 효과가 끝나는 처리가 있으면 그쪽에 먼저 걸음을 넘기고, 그다음 독 카운터와 1바이트짜리 걸음 카운터를 1씩 올린 뒤 카운터 값에 따라 동작합니다. 디컴파일의 주석이 각 분기가 하는 일을 말해 줍니다. “Every 256 steps, increase the happiness of all your Pokemon”(256걸음마다 지닌 포켓몬 전원의 친밀도를 올린다), “Every 256 steps, offset from the happiness incrementor by 128 steps”(256걸음마다, 친밀도 증가에서 128걸음 어긋나게) 알의 부화 카운터를 줄인다(코드는 카운터를 $80, 즉 128과 비교합니다), “Every 4 steps, deal damage to all poisoned Pokemon”(4걸음마다 독에 걸린 포켓몬 전원에게 피해를 준다).1 이 중 첫 번째 주석이 설명하는 것은 호출이지 결과가 아닙니다. 호출되는 engine/events/happiness_egg.asm의 StepHappiness는 자기 주석 “Raise the party’s happiness by 1 point every other step cycle”(걸음 주기 두 번에 한 번, 지닌 포켓몬의 친밀도를 1포인트 올린다)로 시작합니다. 두 번째 1바이트 카운터를 0과 1 사이에서 뒤집고(and 1), 두 번에 한 번은 아무것도 하지 않고 돌아갑니다. 따라서 지닌 포켓몬의 친밀도는 512걸음마다 1 오르며, 알은 제외됩니다.2 알에 관한 주석은 한계로 끝납니다. 세는 일은 첫 번째 “one that is ready to hatch”(부화할 준비가 된 것)에서 멈춥니다. engine/pokemon/breeding.asm의 DoEggStep은 지닌 포켓몬을 순서대로 훑으며 각 알의 카운터에서 1을 빼고, 카운터가 0이 되는 순간 곧바로 돌아갑니다. 그러면 CountStep이 그 걸음을 부화 스크립트에 넘기고, 순서상 그 뒤에 있는 알은 다음 박자를 기다립니다.40 CountStep은 매 걸음 키우미집에 맡긴 포켓몬 두 마리에게 각각 경험치 1을 더해 주고, 마지막으로 자전거 걸음을 셉니다.1

이 루틴에서 가장 재치 있는 농담은 자전거입니다. 『금·은·크리스탈』에서는 자전거 가게가 자전거를 빌려주고, 주인의 번호가 전화에 등록됩니다. 전화가 터지는 범위 안에서 1,024걸음 이상 타면 그가 전화를 걸어오고, 자전거 카운터는 한 바퀴 돌아 0으로 가지 않고 65,535에서 멈춥니다.1 자전거는 타고 다니는 광고이고, 게임은 당신이 그것을 탄 모습이 사람들 눈에 띄었는지를 세고 있는 셈입니다.

『에메랄드』: TryStartStepCountScript

『에메랄드』는 한 걸음에 더 많은 것을 매답니다. src/field_control_avatar.c의 TryStartStepCountScript는 순서대로 다음을 진행합니다. 재대전 카운터, 친밀도 카운터, Faraway Island 카운터, 독, 알 부화, 이상 기후의 종료, 동굴 입구를 여는 점자 퍼즐, 스크립트로 정해진 전화 다섯 통, 사파리존, S.S. Tidal의 복도, 그리고 Match Call입니다. 독은 4걸음마다 작용하지만(%= 4), 비밀기지 안에서는 결코 작용하지 않습니다.14 친밀도는 확실한 것이 아닙니다. 128걸음마다(카운터는 %= 128로 유지됩니다) 게임은 지닌 포켓몬 슬롯마다 AdjustFriendship를 한 번씩 호출하고, 이 함수는 “50% chance every 128 steps”(128걸음마다 50% 확률)라는 주석 아래에서 Random() & 1이 켜져 있으면 일찍 돌아갑니다. 즉 알을 제외한 지닌 포켓몬 각각이 자기 동전을 던지고, 이긴 박자에서만 친밀도를 얻습니다. 평균하면 256걸음에 한 번입니다.1415

알은 자기 시계로 움직입니다. 키우미집의 걸음 카운터는 255에 이르면 발동하고 한 바퀴 도는 1바이트이므로, 256걸음마다 지닌 알 각각이(아래의 한계 안에서) 부화 사이클을 하나 잃고, 불꽃몸이나 마그마의 무장을 가진 포켓몬이 함께 있으면 둘을 잃습니다. 『에메랄드』에도 같은 한계가 다른 형태로 있습니다. 루프는 손상된 데이터로 표시된 알(MON_DATA_SANITY_IS_BAD_EGG)을 건너뛰고, 카운터가 이미 0인 알을 만나면 거기서 멈춰 그 알을 부화시키므로, 순서상 그 뒤의 알은 다음 박자를 기다립니다. 키우미집은 같은 256걸음 박자에 새 알이 생길지도 굴립니다. 두 번째 부모의 걸음 수 하위 바이트가 0xFF에 이를 때입니다.41

타이머가 아니라 예산

또 다른 종류의 걸음은 한 번 쓰고 마는 예산입니다. 가장 분명한 예가 사파리존입니다. 『레드·블루』에서는 게이트가 500원을 받고 사파리볼 30개를 건네며 걸음 카운터에 502를 써 넣은 다음, 자동으로 공원 안쪽으로 세 걸음을 걷게 합니다. 『에메랄드』는 카운터를 딱 500으로 설정합니다.16 『레드』가 왜 500이 아니라 502에서 시작하는지 코드는 말해 주지 않으며, 저는 게임을 실제로 돌려 그 세 걸음 중 몇 걸음이 카운터에서 빠지는지 세어 보지 않았습니다. 스프레이도 예산이며 『레드』부터 『에메랄드』까지 변함이 없습니다. 벌레회피스프레이는 100걸음, 실버스프레이는 200걸음, 골드스프레이는 250걸음입니다.17 재대전은 3세대에서 예산이 되었습니다. 배지를 다섯 개 모은 뒤 『에메랄드』의 재대전 카운터는 255걸음에서 가득 차고, 다음에 맵을 불러올 때 그 루트의 트레이너 중 누군가가 무작위로 다시 싸우고 싶어 할 수 있습니다. 『파이어레드·리프그린』의 배틀서처, 즉 트레이너에게 재대전을 청하는 도구는 100걸음을 걸은 뒤에야 다시 쓸 수 있습니다.42

디컴파일에서 읽은, 걸음 수 로그 눈금의 가로 막대그래프. 채워진 막대는 반복되는 박자: 키우미집의 포켓몬은 한 걸음마다 경험치 1을 얻는다. 독에 걸린 지닌 포켓몬은 4걸음마다 피해를 입는다. 3세대에서는 128걸음마다 지닌 포켓몬 각각이 50퍼센트 확률로 친밀도를 얻는다. 지닌 알은 256걸음마다 부화 사이클을 하나 잃으며, 지닌 순서대로 부화 준비가 된 첫 알까지 진행된다. 2세대에서는 지닌 포켓몬의 친밀도가 512걸음마다 오른다. 테두리만 있는 막대는 한 번 쓰는 예산: 255의 재대전 카운터, 100의 배틀서처, 벌레회피스프레이 100, 실버스프레이 200, 골드스프레이 250, 500의 사파리존(『레드·블루』에서는 502), 1,024의 자전거 가게 전화.

한 걸음이 무엇을 치르는지, 사건 한 번당 걸음 수로. measure_systems.out.txt를 바탕으로 figures.py로 그렸습니다.43

왜 효과가 있었는가

코드에서 세 가지 설계상의 귀결이 나오며, 간직할 가치가 있는 것은 바로 이 부분입니다.

모든 것이 굵은 박자 위에 있습니다. 알은 두 세대 모두 256걸음마다 움직입니다. 2세대는 친밀도를 512걸음마다 올리고, 3세대는 지닌 포켓몬 각각에게 128걸음마다 친밀도 동전 던지기를 줍니다. 플레이어는 숫자가 올라가는 것을 보지 못합니다. 보이는 것은 이따금 일어나는 사건, 알이 움직인다는 메시지나 갑자기 더 다정해진 포켓몬입니다. 1바이트 카운터는 게임보이가 가진 가장 값싼 시계이고, 제 해석으로는 보상이 진행 막대가 아니라 날씨처럼 느껴지는 이유도 그것입니다. 지켜볼 수 없으니 알아채게 되는 것입니다. 『에메랄드』의 동전 던지기는 이 날씨를 문자 그대로 만듭니다. 같은 길을 걸어도 친밀도가 오를 수도, 오르지 않을 수도 있습니다.121415

예산은 기다림이 아니라 움직임으로 쓰입니다. 사파리존의 500걸음도, 스프레이의 100, 200, 250걸음도 걸을 때만 줄어듭니다. 멈춰서 글을 읽거나, 생각하거나, 저녁을 먹으려고 게임기를 내려놓은 플레이어는 아무것도 잃지 않습니다.1617 몇 분마다 화면이 엎어지는 휴대폰 앱에는 카운트다운보다 이편이 더 나은 약속입니다.

걷기는 사회적 신호입니다. 자전거 가게의 전화는 당신이 그 자전거를 타고 돌아다녔다는 것을 게임이 알아챘다는 표시이고, 『에메랄드』의 재대전 카운터는 당신이 떠났다가 돌아왔다는 것을 루트가 “기억하게” 합니다.142 제 해석으로는 걸음 수 카운터의 가장 깊은 요령은, 그곳에 있는 것 말고는 아무것도 요구하지 않으면서 세계가 플레이어의 존재에 반응하게 만든다는 점입니다.

이 가운데 어느 것도 생물이 필요하지 않습니다. 카운터, 박자, 예산이면 됩니다. 저작권은 운용 방법에는 미치지 않으며, 카운터는 바로 거기에 속합니다.44 걸음으로 움직이는 메커니즘에 누군가 특허를 갖고 있는지는 제가 조사하지 않은 질문이며, 14절도 그렇게 적고 있습니다. 14절은 이 카운터를 화분에 씁니다.

3. 시계와 달력: 한 주에는 모양이 있었다

『금·은』은 카트리지에 실시간 시계를 넣었고, 디자이너들은 그것을 약속에 썼습니다. 『에메랄드』는 시계를 유지하면서 약속을 스스로 넘어가는 달력으로 옮겼습니다. 둘을 합치면, 자리를 비운 사이에 변하는 세계를 지지하는 논거로 제가 아는 가장 좋은 것이 됩니다.

하루의 세 구간

『금·은·크리스탈』은 하루를 셋으로 나눕니다. 아침은 04:00부터 09:59까지, 낮은 10:00부터 17:59까지, 밤은 18:00부터 03:59까지입니다. 상수는 MORN_HOUR 4, DAY_HOUR 10, NITE_HOUR 18이고, TimesOfDay 테이블에는 “0400-0959 morn | 1000-1759 day | 1800-0359 nite”라는 주석이 붙어 있습니다. 디컴파일에는 값 20, 40, 60을 가진 쓰이지 않는 BetaTimesOfDay 테이블이 그 옆에 남아 있습니다.18

Kiradex는 이미 시간을 가지고 있고, 일부러 그 시각들을 쓰지 않습니다. 앱의 Daylight.Phase는 6시부터 9시가 아침, 9시부터 17시가 낮, 17시부터 20시가 저녁, 나머지가 밤이며, 자체적인 네 단계의 밝기를 가집니다. 14절의 브리프도 이를 그대로 유지합니다.45

정해진 요일의 약속

자연공원의 벌레잡기대회는 화요일, 목요일, 토요일에 열립니다. 게이트의 스크립트는 그 세 요일만 확인하고 다른 요일은 확인하지 않습니다. 실제 시간으로 20분 동안 이어지고 파크볼 20개를 주며(BUG_CONTEST_MINUTES 20, BUG_CONTEST_BALLS 20), 일일 플래그가 같은 날 두 번째 참가를 막습니다.19 『크리스탈』은 자정에 일일 플래그 16개를 초기화합니다. 8개씩 2바이트로, Kurt의 볼 만들기, 벌레잡기대회, 대량 발생, 나무열매 나무, 이발, 백화점의 기술머신, 기술 가르침 등입니다.20

럭키 넘버 방송은 매주 있습니다. 다음 금요일까지의 카운트다운이 새로운 다섯 자리 숫자를 고르고, 게임은 그것을 지닌 포켓몬과 14개 박스 전체에 있는, 당신이 가진 모든 포켓몬의 트레이너 ID와 가장 오른쪽 자리부터 맞춰 봅니다. 다섯 자리가 모두 맞으면 1등, 세 자리나 네 자리면 2등, 두 자리면 3등입니다.21 전화에 등록되는 트레이너 24명에게는 재대전을 위해 전화를 걸 수 있는 요일 하나와 시간대 하나가 있고, 한 요일에 서너 명씩 배정되어 있습니다. 이들에게는 6절에서 다시 돌아옵니다.46

24시간 띠 두 개와 한 주. 『금·은·크리스탈』: 아침 04:00~09:59, 낮 10:00~17:59, 밤 18:00~03:59. Kiradex의 Daylight: 아침 06:00~08:59, 낮 09:00~16:59, 저녁 17:00~19:59, 밤 20:00~05:59. 그 아래 『크리스탈』의 한 주: 화요일, 목요일, 토요일의 벌레잡기대회, 금요일의 럭키 넘버 추첨, 요일별 재대전 전화 창은 월요일부터 3, 3, 4, 4, 4, 3, 3으로 모두 24, 그리고 매일 자정에 초기화되는 일일 플래그 16개.

『크리스탈』의 하루와 한 주, 그리고 앱 자체의 하루. measure_systems.out.txt와 Daylight.swift를 바탕으로 figures.py로 그렸습니다.43

『에메랄드』의 달력

『에메랄드』는 날짜가 바뀔 때마다 UpdatePerDay에서 열한 가지 “하루 단위” 갱신을 돌립니다. 일일 플래그 지우기, 유행어 움직이기, TV 방송과 대량 발생 경과시키기, 날씨, 포켓러스, Mirage Island 번호, 털보박사의 상태, 배틀프런티어 등장인물 두 명(각각 한 번의 호출), Shoal Cave의 아이템, 그리고 복권 번호입니다. 같은 파일은 플레이어가 포켓몬센터 안에 서 있는 동안에는 이 모두를 건너뜁니다.22 『에메랄드』에는 이름 붙은 일일 플래그가 12개 있고, 그중 9개는 누군가에게서 받는 공짜 나무열매입니다. 콘테스트 로비, 루트에 있는 세 사람, Berry Master와 그 아내, Lilycove, 꽃집, Sootopolis입니다. 나머지 셋은 비밀기지, 복권, 그리고 제자(Apprentice)의 떠남입니다.47

실제 시간으로 자라는 정원

3세대의 나무열매 나무에는 심음, 싹틈, 자람, 꽃핌, 열매 맺음의 단계가 있고, 이벤트용 나무에는 “반짝이는” 단계가 더 있으며, 세이브에는 나무 슬롯이 128개 있습니다.48 성장은 걸음이 아니라 실시간 시계의 분 단위로 진행됩니다. UpdatePerMinute가 흐른 분을 BerryTreeTimeUpdate에 넘기고, 각 단계는 stageDuration × 60분 동안 이어지며, 열매 맺음 단계는 그 네 배 동안 이어집니다. 그 뒤 나무는 수확되지 않은 열매가 사라진 채(berryYield = 0) 싹틈 단계로 스스로 다시 심어지고, 이를 최대 10번 반복한 뒤 지워집니다.3 한꺼번에 넘겨받은 분이 단계 길이의 71배에 이르러도 나무는 지워집니다. 이것은 minutes >= GetStageDurationByBerryType(tree->berry) * 71에 대한 제 해석이며, 단계가 한 시간인 나무열매라면 약 사흘의 부재에 해당합니다.3

나무열매 정의 43개에 걸쳐 stageDuration은 1시간이 5종, 3시간이 12종, 4시간이 1종, 6시간이 11종, 12시간이 1종, 18시간이 5종, 24시간이 8종입니다. 따라서 심은 뒤 첫 열매까지는 4, 12, 16, 24, 48, 72, 96시간 중 하나가 걸립니다.3 물 주기는 단계마다 한 번 기록되어 플래그가 네 개이고, 수확량은 물을 준 단계 수에 따라 올라가는 범위에서 무작위로 뽑힙니다. 물을 주지 않으면 그 열매의 최솟값이고, 물을 준 단계가 하나 늘 때마다 범위가 최솟값에서 최댓값 쪽으로 4분의 1씩 옮겨 가며, 뽑힌 값은 반올림됩니다(CalcBerryYieldInternal).3 43종의 수확량 범위에 대해 이 함수를 열거하면, 최댓값이 최솟값보다 2 이하로만 큰 33종은 네 단계 모두 물을 주면 언제나 최댓값이 나옵니다. 나머지 10종(수확량 2~6 또는 3~6)은 네 단계 모두 물을 주면 최댓값이나 그보다 1 적은 값이 나오고, 2~6인 열매는 물 준 단계가 하나면 2나 3, 둘이면 3이나 4, 셋이면 4나 5, 넷이면 5나 6이 나옵니다.49

『에메랄드』의 나무열매 43종을 심은 뒤 첫 열매까지의 시간으로 나눈 막대그래프. 4시간 5종, 12시간 12종, 16시간 1종, 24시간 11종, 48시간 1종, 72시간 5종, 96시간 8종.

『에메랄드』의 나무열매가 걸리는 시간. measure_systems.out.txt의 stageDuration 개수를 바탕으로 figures.py로 그렸습니다.43

이 발상은 게임보이 어드밴스보다 오래 살아남았습니다. 『하트골드·소울실버』의 포켓슬론은 제가 측정하지 않았고 Serebii의 가이드로만 알고 있는데, 세 종목으로 된 한 라운드가 끝날 때마다 “plus 100 points if you came in first”(1등이면 100점 추가)를 주고, 상점에서 파는 물건은 “change each day”(매일 바뀐다)고 합니다.50

왜 효과가 있었는가

한 주에는 모양이 있었습니다. 『금·은』은 시계를 약속에 썼습니다. 일주일에 사흘 열리는 대회, 각자 한 요일의 한 시간대에만 연락이 닿는 트레이너 24명, 금요일의 추첨, 자정에 되돌아오는 16가지 일입니다.19462120 『에메랄드』는 약속을 흐름으로 바꾸었습니다. 유행어는 하루에 5씩 움직이고, 대량 발생은 이틀 동안 이어지며, 뉴스는 4일을 카운트다운하고, 나무열매는 4~96시간이 걸립니다.451273 제 해석으로는 그 결과는 카트리지가 꺼져 있는 동안 변해 있는 세계였고, 그것이야말로 다시 전원을 켤 이유의 전부였습니다.

휴대폰에 중요한 세부가 두 가지 있습니다. 『에메랄드』는 포켓몬센터 안에서는 하루 갱신을 돌리지 않으므로, 발밑에서 아무것도 변하지 않는 안전한 방이 있습니다.22 그리고 나무열매의 성장은 계속 돌아가야 하는 타이머가 아니라 돌아왔을 때 흐른 분으로 계산되므로, 자리를 비운 사이에도 나무는 계속 자랍니다. 그렇다고 나무가 당신을 기다려 주지는 않습니다. 익은 열매는 단계 길이 네 개만큼 나무에 남아 있다가 떨어집니다. 단계가 한 시간인 열매라면 네 시간입니다. 그리고 단계 길이 71개만큼의 부재는 나무를 지웁니다.3 저희 앱도 그렇게 동작하기를 바랍니다. 도착했을 때 시계에서 세계의 상태를 계산하고, 휴대폰이 주머니에 있는 동안 계속 돌아가야 하는 타이머에는 결코 의존하지 않는 것입니다. API 쪽 이야기는 13절에 있습니다.

4. 보여 주는 것들: 카드, 박스, 연승, 추첨

옛 게임들은 지위에 물리적인 형태를 주었고, 그 형태는 하나같이 다른 플레이어가 볼 수 있는 것이었습니다.

트레이너 카드와 그 별

『에메랄드』의 트레이너 카드는 별 개수에 따라 색이 바뀝니다. 별이 없으면 초록, 그다음 브론즈, 구리색, 은색, 그리고 네 개면 금색입니다. 『파이어레드·리프그린』의 관동 카드는 파랑, 초록, 브론즈, 은색, 금색으로 이어집니다.23 『에메랄드』의 별 네 개는 CountPlayerTrainerStars에 있으며, 서로 무관한 네 가지 업적입니다. 전당 등록, 호연 도감 완성, Lilycove 미술관에 마스터 랭크 콘테스트 그림 다섯 점을 모두 거는 것, 그리고 배틀프런티어의 심벌을 모두 갖는 것입니다.23 『에메랄드』가 『루비』나 『사파이어』의 카드를 읽을 때는 대신 GetRubyTrainerStars로 별을 셉니다. 전당 등록, 호연 도감, 그림은 그대로 세고, 프런티어 심벌 자리에는 배틀타워 49연승 초과(battleTowerStraightWins > 49)가 들어갑니다.23 『파이어레드·리프그린』의 카드는 통신 상대용으로 만들어질 때 전당 등록, 관동 도감, 전국 도감, 그리고 두 가지 무선 미니게임을 합쳐서 별 하나를 셉니다. 나무열매 200개 따기와 200번 연속 점프입니다.52

카드는 사회적인 물건이기도 합니다. Easy Chat 프로필, 9,999에서 멈추는 통신 대전 승패, 교환 횟수, 친구와 한 콘테스트와 포켓블록 횟수, 그리고 999시간 59분 59초에서 멈추는 첫 전당 등록까지의 시간이 담겨 있습니다.23

왜 효과가 있었는가. 서로 다른 종류의 긴 위업 네 가지가 각각 통신할 때 남들이 보는 것의 색을 바꾸므로, 그 색은 방 건너편에서도 읽힙니다. 『파이어레드』는 별 네 개 중 하나를 친구와의 플레이에 씁니다. 카드에 있는 것 중 돈으로 산 것은 하나도 없습니다. 제 해석으로는 그것이 금색 카드를 보여 줄 만한 것으로 만듭니다.

PC 박스

보관함은 세대마다 커졌습니다. 『레드·블루』는 20마리짜리 박스 12개로 모두 240마리, 『금·은·크리스탈』은 20마리짜리 14개로 280마리(일본판 빌드는 박스당 30마리로 정의합니다), 『루비·사파이어·에메랄드』는 30마리짜리 박스 14개로 420마리이고, 각 박스는 6×5 격자에 이름과 배경을 가집니다.24 30마리짜리 박스는 바인더 한 페이지와 같은 발상입니다. 정리하는 일에 보답하는 고정된 격자이고, 배경 덕분에 목록일 뿐 아니라 하나의 방이 됩니다.

리본과 코인

『에메랄드』는 리본 ID 32개를 정의합니다. 챔피언 리본, 다섯 부문에 네 랭크씩인 콘테스트 리본 20개, Winning, Victory, Artist, Effort, 그리고 기념 리본 7개입니다. 리본 하나로 포켓몬의 리본이 넷을 넘으면(코드는 GetRibbonCount(...) > NUM_CUTIES_RIBBONS를 검사하고, 그 상수는 4입니다), 슬롯이 비어 있고 같은 방송이 이미 대기 중이지 않은 한 그 주인에 관한 TV 방송이 만들어질 수 있습니다. 방송은 꺼진 상태로 만들어지므로(active = FALSE, 소스에는 기록 교환으로 넘겨지기 전까지는 활성화되지 않는다는 주석이 있음), 기록 교환으로 다른 게임에 실려 간 뒤에야 TV에 나옵니다.532754 게임코너의 코인은 9,999(MAX_COINS)에서 멈춥니다.55 코인은 이 글에서 14절이 분명히 거부하는 유일한 시스템이며, 그 이유는 Nintendo와 아무 관계가 없습니다. Kiradex는 아이들이 쓰는 앱이고,36 그 세계 뒤에 있는 수집 조사는 이미 유료 무작위 아이템과 슬롯머신처럼 생긴 모든 것을 배제했습니다.33

배틀타워와 프런티어의 연승

배틀타워, 팰리스, 아레나, 팩토리 도전은 7전입니다. 배틀돔 토너먼트는 4전(DOME_ROUNDS_COUNT 4), 배틀튜브는 14개 방(NUM_PIKE_ROOMS 14)인데 모두가 배틀은 아니며, 배틀피라미드 등반은 7개 층입니다. FRONTIER_STAGES_PER_CHALLENGE 7은 공유 상수일 뿐 모든 시설이 따르는 규칙이 아닙니다. 연승은 9,999까지 셉니다.25 각 시설의 프런티어 브레인은 연승의 정해진 지점에 나타나 은 심벌, 그다음 금 심벌을 줍니다. frontier_util.c의 테이블은 적힌 그대로 읽히지 않습니다. 검사는 현재 연승에 시설별 보정값을 더하고 그 합을 테이블과 비교합니다(winStreak + modifier == value). 보정값은 타워, 팰리스, 아레나, 팩토리, 튜브에서는 1이므로, 브레인은 35승 다음의 배틀이 아니라 35번째 배틀입니다. 돔은 0이며 연승이 우승한 토너먼트 수를 세고, 피라미드도 0이며 연승이 돌파한 층 수를 셉니다.25

시설 연승이 세는 것 은 브레인 금 브레인
배틀타워 이긴 배틀 35번째 배틀 70번째 배틀
배틀돔 우승한 토너먼트 5번째 토너먼트 10번째 토너먼트
배틀팰리스 이긴 배틀 21번째 배틀 42번째 배틀
배틀아레나 이긴 배틀 28번째 배틀 56번째 배틀
배틀팩토리 이긴 배틀 21번째 배틀 42번째 배틀
배틀튜브 통과한 방 28번째 방 140번째 방
배틀피라미드 돌파한 층 21개 층 돌파 후 70개 층 돌파 후

출처: frontier_util.c(테이블과 검사), 각 연승이 무엇을 세는지는 시설별 스크립트. measure_systems.py와 손으로 읽었습니다.25

타워의 이정표가 가장 깔끔한 모양입니다. 일곱 판씩의 세트가 있고, 보스는 다섯 번째 세트의 마지막 배틀이자 열 번째 세트의 마지막 배틀입니다. 연승이 내용이고, 보스는 문장부호입니다.

컬렉션의 크기에 보답하는 추첨

『에메랄드』의 복권 코너(Lottery Corner)는 매일 새 번호를 뽑아 지닌 포켓몬과 박스에 있는, 당신이 가진 모든 포켓몬의 트레이너 ID와 가장 오른쪽 자리부터 맞춰 봅니다. 코드에는 “do not calculate ticket values for eggs”(알에 대해서는 복권 값을 계산하지 않는다)라고 적혀 있습니다. 두, 세, 네, 다섯 자리가 맞으면 각각 포인트업, 학습장치, 기력의덩어리, 마스터볼을 주고, 일일 플래그가 복권을 하루 한 장으로 제한합니다(FLAG_DAILY_PICKED_LOTO_TICKET).56 『크리스탈』의 주간 럭키 넘버도 같은 방식으로 세 등급을 줍니다. 맞는 숫자가 두 자리, 세 자리나 네 자리, 그리고 다섯 자리 전부입니다.21

왜 효과가 있었는가. 추첨이 박스를 복권으로 바꿉니다. 가진 포켓몬은 모두 대상이고, 다른 트레이너의 ID를 지닌 교환한 포켓몬도 포함되므로, 크고 다양하며 교환을 거듭한 컬렉션이 말 그대로 더 운이 좋습니다. 동시에 이것은 추첨이고, 추첨은 보상을 무작위로 만듭니다. 이 시리즈의 꾸미기 아이템 규칙 “never random, never on a countdown”(절대 무작위가 아니고, 절대 카운트다운이 아니다)은 그것을 거부하므로, 14절은 이것을 넣지 않았습니다.36

5. 기억하는 땅: 턱, 풀베기 나무, 두 대의 자전거

마을과 마을 사이의 루트에는 일방통행 가장자리와, 열 수 있게 되기 전부터 보이는 자물쇠라는 고유한 어휘가 있었습니다. 저는 이것들을 『에메랄드』에서 measure_map_features.py로 셌습니다. 이 스크립트는 모든 맵의 레이아웃을 셀 단위로 읽고, 각 셀의 동작을 타일셋의 속성 테이블에서 찾습니다. 세는 것은 셀이지 지형 요소가 아닙니다. 긴 턱 하나는 여러 셀로 이루어지고, 여러 맵이 공유하는 레이아웃은 한 번만 셉니다.39

턱은 루트의 장치

『에메랄드』의 루트 레이아웃 41개, 모두 87,787셀에는 일방통행 턱 셀(MB_JUMP_* 동작)이 726개, 긴 풀숲 셀이 2,777개 있습니다. 루트 41개 중 21개에 턱이 있습니다. 첫 네 루트의 턱 셀은 13, 17, 24, 13개입니다. 턱은 도시 레이아웃 9개(34셀), 지하(215), 실내(48)에도 있고, 마을 레이아웃 7개에는 하나도 없습니다.39

『에메랄드』의 고유 레이아웃에서 맵 종류별 일방통행 턱 셀 수를 나타낸 막대그래프. 루트는 87,787셀 중 726(0.83퍼센트), 지하는 64,302 중 215, 실내는 44,186 중 48, 도시는 20,500 중 34, 바다 루트, 비밀기지, 마을, 해저 맵은 없음.

『에메랄드』의 맵 종류별 턱 셀. measure_map_features.py의 출력을 바탕으로 figures.py로 그렸습니다.4339

턱은 플레이어를 빠르게 내려가게 하고 돌아오는 길을 다른 길로 만들므로, 짧은 루트 안에 고리가 생깁니다. 사람들이 살고 플레이어가 도착하는 마을에는 턱이 하나도 없습니다.

일찍 보이는 자물쇠: 풀베기 나무와 두 대의 자전거

『에메랄드』는 풀베기로 자를 수 있는 나무 오브젝트를 33개 둡니다. 22개는 루트에, 11개는 실내에 있고, 실내 것은 대부분 체육관 퍼즐입니다.39 두 대의 자전거는 서로 다른 땅을 가로막습니다. 마하자전거 셀(진흙 비탈과 금 간 바닥)은 루트에 52개, 지하에 150개입니다. 더트자전거 셀(레일과 울퉁불퉁한 비탈)은 85개이며 모두 루트에 있습니다.39 마하자전거는 세 단계 속도로 가속하고(sMachBikeSpeeds = {NORMAL, FAST, FASTEST}), 더트자전거는 B 버튼을 누른 채 방향을 넣는 입력을 트릭, 즉 윌리와 버니홉으로 읽습니다.57

왜 효과가 있었는가

열 수 있게 되기 전부터 보이는 자물쇠는 약속입니다. 풀베기 나무와 자전거 전용 땅은 처음 걸을 때 플레이어에게 지름길을 보여 주고, 나중에 걸을 때 그 값을 치러 줍니다. 그리고 『에메랄드』의 자전거 두 대와 두 종류의 잠긴 땅은 어느 자전거를 고르느냐를 이번 길에 지름길의 어느 절반을 볼지 고르는 일로 만듭니다.3957 턱은 방향에 대해 같은 일을 합니다. 내려가는 길은 빠르고 자유롭고, 올라가는 길은 다른 길입니다.

턱은 또한 이 글에서 저희의 이전 결정이 반발하는 유일한 곳입니다. 건물 조사는 위에서 내려다보는 시점에서는 자유로운 높이를 읽기 어렵다는 이유로 턱을 거부했고, 건물 글은 마을에 없는 것 가운데 하나로 “a one-way ledge”(일방통행 턱)를 꼽습니다.3533 한 칸짜리 일방통행 낙차는 자유로운 높이가 아닙니다. z축은 없고, 보행 그래프 안의 한 방향 간선이 있을 뿐입니다. 그래서 브리프는 범위를 좁힌 형태를 제안하고, 결정은 그것이 속한 곳, 앞으로 나올 고저와 루트에 관한 글에 맡깁니다.

6. 다른 사람의 세계: 기록 교환, 유행어, 전화

이 절의 시스템은 제가 광장에 가장 들이고 싶은 것들입니다. 다른 플레이어에 관한 것이면서도 다른 플레이어가 같은 순간에 온라인일 필요가 없기 때문입니다.

비밀기지와 기록 교환

『에메랄드』의 비밀기지에는 장식품을 최대 16개 둘 수 있고, 플레이어의 침실에는 12개를 둘 수 있습니다. 세이브는 비밀기지를 20곳 보관하는데, 자기 기지와 다른 플레이어에게서 받은 기지들입니다.58 어디서 받을까요. 기록 교환에서입니다. 두 플레이어가 통신해 기록을 섞으면, 게임은 세이브 사이에서 0x1444바이트, 즉 5,188바이트의 기록을 복사합니다. 그 필드는 순서대로 비밀기지 20곳 전부, TV 방송 슬롯 25개, 뉴스, Mauville의 노인(Mauville Old Man), 유행어 5개, 키우미집 메일, 배틀타워 기록, 선물 아이템, Lilycove의 여성(Lilycove Lady), 제자 두 명, 그리고 배틀프런티어의 랭킹 홀 기록(ranking-hall records)입니다.26

그러니까 통신 케이블로 논 오후가 지나면 친구의 기지가 내 게임 안에 있고, 그 안으로 걸어 들어갈 수 있습니다. 친구의 TV 방송이 내 TV에서 나옵니다. 친구의 배틀타워 기록도 함께 옵니다. 제 해석으로는 『에메랄드』에서 살아 있다고 느껴진 것의 대부분은 다른 누군가에게서 도착한 것이었습니다.

TV

『에메랄드』의 TV에는 방송 슬롯이 25개 있습니다. 5개는 내 플레이에 관한 방송용이고, 20개는 기록 교환으로만 도착하는 방송용입니다. “일반” 방송은 11종, 기록 교환을 통해서만 존재하는 방송은 19종(Trend Watcher, Secret Base Visit, Lotto Winner, Spot the Cuties 등)이며, 여기에 대량 발생 보도가 더해집니다. 뉴스 이벤트는 방송 전에 4일을 카운트다운합니다.27 게임을 클리어한 뒤에는 무언가를 잡았든 아니든 배틀을 하나 끝낼 때마다 200분의 1 확률(rbernoulli(1, 200))로 대량 발생 보도가 예약됩니다. 단, 통신, 사파리, 배틀프런티어 같은 특수한 배틀이었거나, TV 슬롯 25개 중 처음 24개에 이미 대량 발생 보도가 있으면(검사는 마지막 슬롯 하나 앞에서 멈춥니다) 제외되며, 내 방송용 슬롯 5개 중 하나가 비어 있어야 합니다. 보도는 방송될 수 있기까지 하루를 기다리고(daysBeforeOutbreak = 1, 하루 갱신이 카운트다운), 대량 발생 자체는 TV에서 그 보도를 볼 때에야 시작됩니다. 그때 StartMassOutbreak가 호출됩니다. 그 뒤 이틀 동안 이어지며, 보도된 종이 한 루트에서 만나는 포켓몬의 절반을 차지합니다(probability = 50).51 대량 발생 방송도 다른 방송처럼 기록 교환으로 여행하므로, 친구의 대량 발생이 내 TV에 도착할 수도 있습니다.5126

유행어: 반감기가 있는 말 한 마디

“Dewford Trend”는 Dewford Hall의 사람들이 되풀이하는 Easy Chat 두 단어입니다. dewford_trend.c 맨 위의 주석 블록은 그 자체로 설계 문서입니다. 각 문구는 유행도를 가지며, 그것은 “Initialized as a random value between 30-127 inclusive”(30 이상 127 이하의 무작위 값으로 초기화)됩니다. “If a submitted phrase is less trendy than the current one it won’t be accepted”(제출된 문구가 현재 문구보다 덜 유행하면 받아들여지지 않는다). 그리고 “boring”(지루해진) 문구는 “lose trendiness over time until it reaches 0”(0에 이를 때까지 시간이 지나며 유행도를 잃고), 그다음 최댓값까지 다시 올라가며, 거기서 다시 지루해집니다.4 코드에는 이 수용 규칙의 예외가 둘 있습니다. 한 세이브가 처음으로 제출하는 문구는, 그 세이브가 한 번도 기록을 섞은 적이 없다면 비교 없이 현재 단어를 대체합니다. 그리고 새 문구가 현재 문구와 유행도가 같으면 최댓값이 더 높은 쪽이 이기고, 그것도 같으면 동전 던지기(Random() & 1)로 정합니다.4 하루 갱신은 지난 하루마다 각 문구를 5포인트씩 움직입니다(clockRand = days * 5).4 문구는 유행도 순으로 다섯 개를 보관합니다. 기록을 섞으면 내 문구는 상대의 문구로 바뀝니다. “unless the phrase is the same, in which case the version with a higher trendiness value is used”(단, 같은 문구라면 유행도가 더 높은 쪽이 쓰인다).4

유행을 좇는 사람과 숨겨진 단어

Trendy Sayings는 다른 것입니다. 33개 단어로 된 숨겨진 Easy Chat 그룹입니다.28 얻는 방법은 디컴파일의 주석이 말해 줍니다. 이 단어들은 “normally inaccessible”(보통은 손에 넣을 수 없음)이고, “The Hipster can unlock one word each time he is received via record mixing (and once if he is the player’s default Old Man)”(유행을 좇는 사람은 기록 교환으로 받을 때마다 단어 하나를 풀어 줄 수 있고, 플레이어의 기본 노인이라면 한 번 풀어 준다).28 Mauville의 노인에는 다섯 종류(Bard, Hipster, Trader, Storyteller, Giddy)가 있고, 게임이 어느 쪽으로 시작하는지는 트레이너 ID의 마지막 자리로 정해집니다((trainerId % 10) / 2). 따라서 유행을 좇는 사람이 기본이 되는 것은 그 자리가 2나 3일 때뿐이며, 플레이어 다섯 명 중 한 명입니다. 나머지는 그런 플레이어 중 누군가와 기록을 섞어야 그를 만날 수 있습니다.28

전화 재대전과 착신

『크리스탈』의 전화에는 연락처가 10개 들어갑니다(CONTACT_LIST_SIZE 10). 트레이너 24명이 재대전 준비가 될 수 있고 각자 일일 플래그가 하나씩 있습니다. 10명은 줄 아이템이 있다고 전화할 수 있습니다. 그리고 24명 각자에게 이쪽에서 전화할 수 있는 요일 하나와 시간대 하나가 있어서, 아침에 9명, 낮(『크리스탈』 하루의 두 번째 구간, 10시부터 18시)에 7명, 밤에 8명, 한 요일에 서너 명씩입니다.46 걸려 오는 전화는 배급됩니다. 받은 전화마다 20분짜리 타이머(ReceiveCallDelays)가 시작되고, 전화 없이 끝날 때마다 10분, 5분, 3분으로 짧아집니다. 이 타이머가 소스 주석에서 “50% chance for a call”(전화가 올 확률 50%)이라고 하는 추첨을 막고 있습니다. 거는 사람은 그 시간대에 연락이 닿는 사람 중에서 뽑히며, 출입구에 서 있거나 통화권 밖에 있을 때는 전화가 오지 않습니다.59

왜 효과가 있었는가

다른 사람의 세계가 내 세계에 도착했습니다. 5킬로바이트가 비밀기지 20곳, 다른 사람의 TV 슬롯 20개, 말 한 마디 다섯 개를 실어 날랐습니다.2627 그 어느 것도 내가 플레이할 때 상대가 그 자리에 있을 필요가 없었습니다. 필요한 것은 한 번 상대를 만난 적이 있다는 것뿐이었습니다.

유행어는 반감기가 있는 전염입니다. 세이브의 첫 문구 이후로는, 새 문구는 현재 문구를 이길 때만 마을을 차지하고, 지루해지면서 바래 가며, 접촉으로 퍼집니다. 두 세이브가 만나면 공유된 문구는 유행도가 더 높은 쪽이 이깁니다.4 점수, 흐름, 접촉 규칙이라는 한 줌의 숫자로 이루어진, 완결된 사회적 메커니즘입니다.

유행을 좇는 사람은 의도적으로 희소합니다. 다섯 명 중 한 명만 그를 갖고 있고, 나머지는 그를 가진 누군가를 통해 그를 만나며, 만날 때마다 숨겨진 단어 33개 중 하나를 배울 수 있습니다.28 어휘 자체가 사람에서 사람으로 여행하는 수집품이 됩니다.

방해는 배급됩니다. 전화는 타이머와 동전 던지기로 막혀 있고, 출입구에 서 있을 때는 결코 오지 않으며, 한 통의 전화 직후에 기다림이 가장 길어 20분입니다.59 제 해석으로는, 말을 걸어오는 세계가 매력적인 것은 그것이 드물게 말을 걸 때뿐입니다.

7. 서로 다른 세 개의 선: 저작권, 상표, 특허

여기서부터 11절까지는 기록입니다. Nintendo와 The Pokémon Company가 무엇에 대해 어떤 근거로 조치를 취했고, 무엇을 그냥 두었는가. 세 가지 보호를 구분해 두는 것이 중요합니다. 포켓몬을 베끼는 것을 이야기하는 사람은 대개 그중 하나를 생각하는데, 돌아오는 답은 다른 하나에 관한 것이기 때문입니다.

저작권은 표현을 보호합니다. 미국 저작권청의 Circular 33은 아이디어, 절차, 과정, 시스템, 운용 방법을 저작권 밖에 둡니다. 구체적인 타일, 스프라이트, 음악, 텍스트, 캐릭터는 보호되는 표현입니다.4434 이 시리즈의 첫 글은 10월 4일에 저작권을 명시하도록 정정한 FAQ에서 이렇게 말합니다. 화풍, 방법, 시스템은 저작권으로 보호되지 않고, 구체적인 표현이 보호된다고.34 2절부터 6절까지의 모든 것은 제 해석으로는 방법입니다. 걸음 수 카운터, 시계, 별이 붙은 카드, 점수가 있는 문구.

상표는 표장을 보호합니다. The Pokémon Company의 일본어 사이트는 “ポケットモンスター・ポケモン・Pokémon”(포켓몬스터, 포켓몬, Pokémon)이 Nintendo, Creatures, GAME FREAK의 상표라고 밝히고 있습니다.60 제품을 팔기 위해 쓰는 이름은 상표의 문제입니다. 포켓몬 카드를 스캔하는 앱이 그럴 수밖에 없듯이, 같은 이름을 그것이 무엇인지 설명하기 위해 쓰는 것은 지명적 사용(nominative use)이며, 저희 자체의 세계 설계 문서는 이를 다른 모든 카드 앱이 하는 방식이라고 설명합니다. 그리고 그것은 Kiradex의 규칙이 이미 긋고 있는 선이기도 합니다.37

특허는 청구된 방법을 단계 하나하나로 보호합니다. 일본과 미국은 Nintendo와 The Pokémon Company에 특허를 부여했고, 그 청구항은 프로그램이 컴퓨터에 무엇을 하게 하는지로 기술된 게임 프로그램입니다.1161 특허 청구항은 단계의 목록입니다. 제 해석으로는(법률 자문이 아닙니다), 청구항이 게임에 미치는 것은 그 게임이 청구항의 모든 단계를, 각 단계를 법원이 해석하는 대로, 또는 그 균등물로 수행할 때뿐이며, 균등물은 두 나라 법원 모두 인정합니다. 미국 연방대법원은 이 균등론을 단계별로, “to each of the individual elements of a claim”(청구항의 개별 요소 각각에) 적용하고, 일본 최고재판소는 1998년에 한 부분이 청구항과 다른 제품이 그래도 그 범위에 속하는 조건을 제시했습니다.6263 그러니 단계를 바꾸거나 없애는 것은 바뀐 게임이 청구항 밖에 있다는 주장이 될 뿐 결론이 아닙니다. 밖에 있는지는 그 해석과 균등에 달려 있고, 여기서 다루는 유일한 사건에서 아직 어떤 법원도 판단하지 않았습니다. 9절에서는 여기서 중요한 청구항 네 개를 읽습니다.

아래의 기록은 모든 사건을 셋 중 무엇을 근거로 다투었는지에 따라 분류합니다. 특허 사건은 하나뿐이었습니다.

2016년부터 2026년까지의 세로 타임라인으로, 각 사건에 근거가 표시되어 있다. Uranium과 Prism에 대해서는 보도가 근거를 밝히지 않았으므로 저작권이라는 근거는 내 해석이며, 날짜는 문서나 보도의 것이고, 보도가 날짜를 밝히지 않은 2025년 11월은 그 달의 중간에 두었다. 저작권: 2016년 8월 13일, Uranium 개발자들이 삭제 통지를 받고 다운로드를 내림. 2016년 12월 21일, Prism에 중지 요청서. 2018년 8월 29일, Essentials 툴킷 삭제 보도. 2024년 3월 22일, DMCA 통지 보도 후 Relic Castle 오프라인. 2025년 2월 21일, 중국에서 1억 700만 위안 화해. 특허: 2024년 9월 18일, Pocketpair 제소. 2024년 11월 8일, 특허 세 건 공개. 2024년 11월 30일, Palworld가 던지는 소환을 제거. 2025년 5월 8일, 활공이 글라이더로 옮겨감. 2025년 9월 2일, US 12,403,397 등록. 2025년 11월 4일, 재심사 명령. 2025년 11월, 도쿄의 청구가 구버전으로 좁혀짐. 2026년 3월 25일, 첫 Office Action에서 재심사 대상 청구항 전부 거절. 2026년 7월 22일, 관련 분할출원의 거절 유지 보도. 특허 관련 사건 중 어느 것도 침해에 대한 판단이 아니다. 어느 쪽도 아닌 것: Palworld 출시, The Pokémon Company의 성명, Palworld의 Early Access 종료, 그리고 예정된 2026년 10월 1일과 11월 9일의 기일.

날짜와 근거로 정리한 기록. 8절과 9절에서 인용한 날짜 있는 페이지를 바탕으로 figures.py로 그렸습니다.43

8. 팬 게임, 툴킷, 포럼: 무엇이 조치를 불렀는가

Pokémon Uranium, 2016년 8월: 삭제 통지, 그리고 개발자들 자신의 설명으로는 그들에게 온 편지는 없음

Uranium은 흔히 중지 요청서를 받은 게임으로 묘사됩니다. Aftermath가 2026년 10월 1일 게재한 팬 게임 특집도 이 게임이 “was reportedly issued cease and desists from the legal teams at Nintendo and The Pokémon Company”(Nintendo와 The Pokémon Company 법무팀으로부터 중지 요청을 받은 것으로 전해진다)라고 씁니다.64 하지만 개발자들은 당시 다르게 말했습니다. Kotaku는 2016년 8월 13일, 9년의 작업 끝에 게임을 만든 팬들이 다운로드 링크를 모두 내렸다고 보도하며 그들의 성명을 전문 실었습니다. “After receiving more than 1,500,000 downloads of our game, we have been notified of multiple takedown notices from lawyers representing Nintendo of America.”(저희 게임이 150만 회 넘게 다운로드된 뒤, Nintendo of America를 대리하는 변호사들의 여러 삭제 통지에 대해 통보받았습니다.) 그리고 “While we have not personally been contacted, it’s clear what their wishes are, and we respect those wishes deeply.”(저희가 직접 연락을 받지는 않았지만, 그들이 무엇을 원하는지는 분명하며 저희는 그 뜻을 깊이 존중합니다.) Kotaku는 개발자들이 “haven’t received any cease & desist letters from Nintendo’s lawyers yet”(Nintendo 변호사들로부터 중지 요청서는 아직 한 통도 받지 않았다)라고 말했다고 덧붙였습니다.5 저희 세계 설계 문서는 이를 중지 요청서로 적어 두었습니다. 정확한 문장은 Uranium이 삭제 통지 뒤에 내려졌고, 그 이름이 제목에 들어 있었다는 것입니다.375

Pokémon Prism, 2016년 12월: 공개 나흘 전의 중지 요청서

Prism은 종류가 달랐습니다. 포켓몬 스타일의 새 게임이 아니라 『크리스탈』 자체의 ROM 해킹이었고, 8년에 걸쳐 만들어졌으며, 크리스마스 당일 공개를 앞두고 있었습니다. Kotaku, 2016년 12월 29일: “Nintendo hit them with a cease and desist four days before release”(Nintendo는 공개 나흘 전에 중지 요청을 날렸다). 그리고 모든 것이 “seemed ready for an official release until December 21st, when representatives of Nintendo sent a cease and desist to the project”(12월 21일 Nintendo 측 대리인이 프로젝트에 중지 요청을 보내기 전까지는 정식 공개 준비가 다 된 것처럼 보였다). 이후 제작자는 자기 사이트를 닫았는데, 그 사이트는 다른 ROM 해킹 두 편, Pokémon Brown과 Rijon Adventures도 호스팅하고 있었습니다.6 다음 날 Nintendo Life도 같은 날짜와 12월 25일 공개 예정을 전합니다.65 편지의 가림 처리된 스캔본이, Prism 기여자가 보내 주었다고 말하는 제3자에 의해 Internet Archive에 올라와 있습니다. 올린 사람의 설명은 논쟁적이고 저는 스캔본을 읽지 않았으므로, 이것은 이 글의 출처가 아니라 문서로 가는 실마리일 뿐입니다.66

Pokémon Essentials, 2018년 8월: 툴킷

Essentials는 RPG Maker로 포켓몬 같은 게임을 만들기 위한 무료 툴킷이었습니다. TechSpot은 2018년 8월 29일 Ars Technica의 보도를 이어받아 이렇게 전했습니다. Nintendo가 DMCA 삭제 요청을 보냈고, 툴킷의 위키를 호스팅하던 Fandom이 이에 따랐으며, PokéCommunity의 팬 게임 섹션에서 다운로드가 삭제되었다. TechSpot 자체의 견해는 “the assets Pokemon Essentials uses appear to be identical to the ones in Pokemon games”(Pokemon Essentials가 쓰는 에셋은 포켓몬 게임의 것과 동일해 보인다)였습니다.7

Relic Castle, 2024년 3월: 포럼, 그리고 확인되지 않은 발신자

저희 자체의 조사 브리프는 Relic Castle을 Essentials와 함께 2018년의 삭제로 묶어 두었습니다.33 실제로는 2024년 3월이었습니다. GamesRadar+, 2024년 3월 22일: 2014년부터 운영되던 팬 포럼이 오프라인이 되었고, 그 성명은 “the Relic Castle website has been taken down following a DMCA takedown notice”(Relic Castle 웹사이트는 DMCA 삭제 통지에 따라 내려졌다)라고 했습니다. GamesRadar+에 따르면 이 사이트는 “didn’t host these games directly”(이 게임들을 직접 호스팅하지는 않았지만) 그것들로 가는 링크는 허용했으며, 누가 통지를 보냈는지는 확인되지 않았습니다.8

팬 프로젝트는 어떻게 눈에 띄는가, 그것을 알아챈 변호사의 말로

Don McGowan은 The Pokémon Company의 최고법무책임자였습니다. 2024년 3월 Aftermath가 회사가 팬 프로젝트에 대한 중지 요청서를 어떻게 다루었는지 묻자, 그는 이렇게 답했습니다. “Short answer: thanks to you folks.”(짧게 말하면, 여러분 덕분입니다.) 그가 로스쿨 학생들에게 말하는 세상에서 가장 나쁜 일은 팬 프로젝트가 “gets press, because now I know about you”(언론에 나는 것, 그러면 이제 내가 당신을 알게 되니까)라는 것입니다. 그리고 후반부. “You don’t send a takedown right away. You wait to see if they get funded (for a Kickstarter or similar); if they get funded then that’s when you engage. No one likes suing fans.”(삭제 요청을 바로 보내지는 않습니다. 그들이 (Kickstarter 같은 곳에서) 자금을 모으는지 기다려 봅니다. 자금을 모으면 그때 나서는 거죠. 팬을 고소하고 싶어 하는 사람은 아무도 없습니다.)67 Video Games Chronicle은 다음 날 같은 발언을 실었습니다.68

중국, 2025년: 게임 전체의 복제

기록에서 가장 큰 배상은 팬 게임이 아니라 저작권 및 부정경쟁 사건입니다. The National Law Review에 따르면 2025년 2월 21일 광둥성 고급인민법원은 2021년 12월 제소된 게임 “Pokémon: Remastered”를 둘러싸고 The Pokémon Company에 대한 1억 700만 위안의 화해를 발표했습니다. 회사는 5억 위안을 청구했고, 선전의 1심에서 1억 700만 위안을 인정받은 바 있었습니다.69 보도가 요약한 1심의 판단 근거는 오마주를 쓰는 사람이라면 누구든 꼼꼼히 읽어 볼 만합니다. 피고 게임의 캐릭터, 주인공, 맵은 원작과 “one-to-one”(일대일)로 대응했고, 그 시스템은 “highly similar or even completely consistent, and many numerical system designs are the same”(매우 유사하거나 심지어 완전히 일치하며, 수치 시스템 설계의 상당수가 같다)였습니다.69 제 해석으로는 숫자는 다른 모든 것까지 베낀 게임에 대한 판단의 한 가닥일 뿐입니다. 그래도 이것이 14절이 몇 개의 깔끔한 숫자만 출발점으로 삼고, 게임의 숫자가 깔끔하지 않은 곳에서는 자체 범위를 정하며, 게임의 테이블은 결코 가져오지 않는 이유입니다.

기록이 보여 주는 것

네 건의 팬 사건 중 세 건은 포켓몬 자체의 표현을 썼고, 네 번째인 Relic Castle은 그런 표현을 쓴 게임으로 가는 링크를 올려 두었습니다. Uranium은 이름을 제목에 썼고, 개발자들 스스로 센 바로는 150만 회 다운로드되었습니다. Prism은 『크리스탈』의 ROM 해킹으로, 게임 자체의 코드와 아트 위에 만들어졌습니다. Essentials는 한 기자가 게임의 것과 동일하다고 한 에셋을 담고 있었습니다. Relic Castle은 그런 게임들로 링크를 걸었습니다.5678 제 해석으로는 각각의 근거는 저작권이었습니다. 둘은 저작권 통지인 DMCA 통지가 보도된 경우였고(다만 Relic Castle에 통지를 보낸 사람은 확인되지 않았습니다), 나머지 둘에 대한 보도는 근거를 밝히지 않았지만 두 게임 모두 원작의 표현 위에 만들어졌고, Uranium은 이름까지 달고 있었으니 상표의 문제이기도 했습니다. 특허에 의한 조치는 하나도 없었습니다. 전 최고법무책임자는 방아쇠를 덧붙입니다. 언론, 그리고 돈입니다.67

제 해석: 기록이 보여 주는 것은 포켓몬의 표현에 대한 조치, 그리고 주목도에 자금이 더해진 경우에 대한 조치이지, 장르에 속한다는 이유로 게임에 취한 조치가 아닙니다. 11절의 트리뷰트 게임은 모두 이 장르에 속하고, 돈을 받고 팔리며, 조치의 대상이 되었다는 보도가 없습니다. 이 해석은 지금까지 일어난 일에 대한 것이지, 앞으로 일어날 일에 대한 약속이 아닙니다.

9. Palworld: 메커니즘을 둘러싼 유일한 사건

Palworld는 해석을 바꾸는 사건입니다. 기록 가운데 특허로 다투는 유일한 사건이기 때문입니다. 그리고 아직 끝나지 않았습니다.

성명, 2024년 1월

Pocketpair는 2024년 1월 19일 Palworld를 출시했습니다.10 1월 25일 The Pokémon Company는 기업 사이트에 他社ゲームに関するお問い合わせについて라는 제목의 공지를 올렸습니다. 제가 옮기면 다른 회사의 게임에 관한 문의에 대하여이며, 일본어로 쓰고 그 아래에 영어 문장을 붙였습니다. 영어 문장은 이렇습니다. “We have not granted any permission for the use of Pokémon intellectual property or assets in that game. We intend to investigate and take appropriate measures to address any acts that infringe on intellectual property rights related to the Pokémon.”(해당 게임에서 포켓몬의 지식재산이나 에셋을 사용하도록 허락한 바가 전혀 없습니다. 포켓몬과 관련된 지식재산권을 침해하는 행위에 대해서는 조사한 뒤 적절한 조치를 취할 예정입니다.) 게임의 이름은 밝히지 않았습니다.70 그 위의 일본어 문장은 영어가 빠뜨린 것을 하나 더 말합니다. 문의 중에는 그 게임이 포켓몬과 닮았다는 의견(ポケモンに類似しているというご意見)이 있었다는 것입니다.70 같은 날 Nintendo Life의 보도는 게임의 이름을 밝혔습니다.71

소송, 2024년 9월

Nintendo와 The Pokémon Company는 2024년 9월 19일, Pocketpair를 상대로 도쿄지방재판소에 “on September 18, 2024”(2024년 9월 18일에) 특허권 침해 소송을 제기했다고 발표했습니다. Palworld가 “infringes multiple patent rights”(여러 특허권을 침해한다)는 이유로 “an injunction against infringement and compensation for damages”(침해 금지명령과 손해배상)를 구하는 소송입니다.9 Pocketpair의 2024년 11월 8일 보고가 특허와 청구 내용을 밝혔습니다.10

특허 출원 등록
JP 7545191 2024년 7월 30일 2024년 8월 27일
JP 7493117 2024년 2월 26일 2024년 5월 22일
JP 7528390 2024년 3월 5일 2024년 7월 26일

원고들은 Palworld에 대한 금지명령과, 각자에게 500만 엔 및 지연손해금을 청구합니다. “compensation for a portion of the damages incurred between the date of registration of the patents and the date of filing of this lawsuit”(특허 등록일부터 본 소송 제기일까지 발생한 손해 일부의 배상)입니다.10 Google Patents는 세 건 모두의 권리자로 Nintendo와 The Pokémon Company를 올리고 있습니다.111213 세 건 모두 Palworld 출시 이후에 출원되었지만, 처음부터 새로 낸 것은 아닙니다. GamesRadar+는 일본 변리사 구리하라 기요시(Kiyoshi Kurihara)를 인용해, 세 건 모두 2021년 12월에 등록되었다고 묘사하는 모특허의 분할 특허라고 보도합니다.72 Google Patents의 패밀리 표는 다르게 말합니다. 세 건 각각이 2021년 12월 22일의 우선일을 가지며, 그날 출원된 출원에서 분할로 내려옵니다. 7493117과 7545191은 JP 2021-208275에서, 7528390은 JP 2021-208276에서입니다. 이 두 출원은 나중에 JP 7398425 B2(2023년 12월 14일)와 JP 7349486 B2(2023년 9월 22일)로 공개되었습니다. 2021년 12월은 출원일이며, 저장한 페이지에서 둘 중 어느 쪽의 등록일도 찾지 못했습니다.111213

세 청구항이 말하는 것

아래는 각 특허의 청구항 1이며, Google Patents의 일본어 기계 번역에서 가져왔습니다. 정본은 일본어이고, 청구항은 소송 중에 정정될 수 있으며 Google 페이지가 그것을 반영하지 않을 수 있습니다.7333 제가 요약하고, 번역문 자체의 말은 따옴표로 표시합니다.

JP 7493117, 표시. “the first mode”(제1 모드)에서 프로그램은 “a direction of aim in the virtual space based on a first operation input which is a directional input”(방향 입력인 제1 조작 입력에 기초한 가상 공간 안의 조준 방향)을 정합니다. 두 번째 입력으로 조준을 필드 캐릭터 쪽으로 돌리고 “a first indicator is displayed”(제1 표시가 표시된다). 세 번째 입력으로 플레이어 캐릭터가 “a capture item for capturing the field character in the aiming direction”(필드 캐릭터를 포획하기 위한 포획 아이템을 조준 방향으로) 놓게 합니다. 맞으면 “a capture success determination”(포획 성공 판정)을 하고, 표시는 “information indicating the ease of making a positive judgment of the successful capture judgment”(포획 성공 판정에서 긍정 판정이 내려지기 쉬운 정도를 나타내는 정보)입니다.11

JP 7545191, 던지기. 버튼을 누르면 제1 카테고리 그룹의 포획 아이템이나 제2 카테고리 그룹의 전투 캐릭터 중 하나를 놓을 자세를 취합니다. 방향 입력으로 조준을 정하고, “using an operation button different from the operation button”(그 조작 버튼과 다른 조작 버튼을 사용한) 입력으로 어느 포획 아이템이나 전투 캐릭터인지 고릅니다. 첫 번째 버튼을 떼면 고른 것을 던집니다. 맞은 포획 아이템은 포획 판정을 시작하고, 싸울 수 있는 곳에 놓인 전투 캐릭터는 “a battle between the combat character and the field character on the field to commence”(필드에서 전투 캐릭터와 필드 캐릭터의 전투를 개시)하게 합니다.12

JP 7528390, 탑승. 플레이어 캐릭터는 조작 입력으로 제어됩니다. 자기가 소유한 “a plurality of types of rideable characters”(여러 종류의 탑승 가능 캐릭터) 중 하나에 타며, “when a first operation input is performed while the player character is in the air”(플레이어 캐릭터가 공중에 있는 동안 제1 조작 입력이 이루어지면) “an airborne rideable character”(공중의 탑승 가능 캐릭터)에 올라타 공중을 이동합니다.13

GamesRadar+는 구리하라와 변리사 법인 Siarasia에게서(Automaton 경유) 같은 대응 관계를 전합니다. 7545191은 조준해 던지는 포획, 7493117은 포획 가능성 표시, 7528390은 올라타기와 탑승입니다.72

게임이 바꾼 것

Pocketpair의 2025년 5월 8일 공지가 무엇을 했는지 말합니다. 2024년 11월 30일 배포된 패치 v0.3.11은 “removed the ability to summon Pals by throwing Pal Spheres and instead changed it to a static summon next to the player”(팰 스피어를 던져 팰을 소환하는 기능을 없애고, 대신 플레이어 옆에 고정 소환하는 방식으로 바꿨다). v0.5.5부터는 “gliding will be performed using a glider rather than with Pals”(활공은 팰이 아니라 글라이더로 한다). 공지는 “these changes were indeed a result of the ongoing litigation”(이 변경은 실제로 진행 중인 소송의 결과였다)고 분명히 말하며, Pocketpair가 계속 “to dispute these claims and assert the invalidity of the patents in question”(이 청구를 다투고 해당 특허의 무효를 주장)하겠다고 합니다.74 제 해석으로는 각 변경은 한 청구항의 한 단계에 닿습니다. 첫째는 JP 7545191 청구항 1의 전투 캐릭터를 던져 놓는 것, 둘째는 JP 7528390의 공중 탑승입니다. 바뀐 게임이 이제 어느 청구항 밖에 있는지는 법원이 그 단계들을 어떻게 해석하느냐에 달려 있습니다. Pocketpair의 공지가 전하는 것은 무엇을 바꿨는가이지 판단이 아니며, 어떤 법원도 아직 판단하지 않았습니다.

범위 축소, 2025년 11월

Automaton은 2026년 6월 12일, 일본인 직원들이 확인한 도쿄지방재판소 기록과 Games Fray를 근거로, 원고들이 “revised the scope of their claims in November 2025 so that they now apply only to older versions of Palworld”(2025년 11월 청구 범위를 수정해 이제 Palworld의 구버전에만 적용되도록 했다)고 보도했습니다. 같은 보도에 따르면 “While the plaintiffs are still seeking an injunction against Palworld, limiting the lawsuit to older versions of the game appears to reduce the likelihood that the current version will be directly affected.”(원고들이 여전히 Palworld에 대한 금지명령을 구하고 있지만, 소송을 게임의 구버전으로 한정한 것은 현재 버전이 직접 영향을 받을 가능성을 낮추는 것으로 보인다.) 법원 기록에는 2026년 10월 1일의 기술 설명회와 2026년 11월 9일의 재판부 예비 견해 제시가 예정되어 있었습니다.29

2026년 10월 4일 기준으로 Pocketpair의 중요 공지 목록에는 2025년 5월 8일 이후 소송에 관한 내용이 없고, 10월 1일 설명회에서 무슨 일이 있었는지 보도한 이름 있는 매체도 찾지 못했습니다. 판결, 화해, 금지명령 중 어느 것도 보도되지 않았습니다.30 Palworld는 2026년 7월 Early Access를 마쳤습니다. Steam은 출시일을 “9 Jul, 2026”으로 적고 있고, Automaton은 발표된 날짜를 7월 10일로 보도했습니다.7529

선행 기술이 된 팬 게임

기록에는 따로 한 문단을 쓸 만한 아이러니가 있습니다. Automaton은 2026년 7월 22일, 일본 특허청이 Nintendo와 The Pokémon Company의 분할출원 No. 2026-019762에 대한 거절을 유지했다고 보도했습니다. 이 출원은 “in-game monster-capturing system”(게임 내 몬스터 포획 시스템)을 기술한 것입니다. 핵심 근거 중 하나는 2013년 YouTube에 올라온 팬 게임 Pokémon Generations의 영상이었습니다. Nintendo 측은 그 팬 게임이 자사 저작권을 침해했다고 주장했지만, 심사관은 Automaton의 요약에 따르면 “whether an invention infringes on copyright or not has no bearing on determining inventive step”(발명이 저작권을 침해하는지 여부는 진보성 판단과 아무 관계가 없다)라고 답했습니다. 이 거절은 그 분할출원에 관한 것이지 도쿄에서 주장된 특허에 관한 것이 아니며, Nintendo에게는 이에 대해 심판을 청구할 3개월의 기간이 있었습니다.76 8절의 사건들이 다룬 종류의 프로젝트인 팬 게임이 메커니즘에 관한 증거가 된 것입니다.

미국 쪽: 특허 한 건, 재심사 중

제가 찾을 수 있는 한 Pocketpair를 상대로 한 미국 소송은 보도되지 않았습니다. 미국 특허는 있습니다. Nintendo와 The Pokémon Company에 양도된 US 12,403,397은 2023년 3월 1일 출원되어 2025년 9월 2일 등록되었습니다.61 그 청구항 1은 필드에서 플레이어 캐릭터를 움직이고, 입력으로 “a sub character”(서브 캐릭터)를 소환합니다. 서브 캐릭터가 나타나는 곳에 적이 있으면 전투는 “a first mode in which the battle proceeds based on an operation input”(조작 입력에 기초해 전투가 진행되는 제1 모드)로 진행되고, 없으면 서브 캐릭터가 자동으로 움직이기 시작합니다. 두 번째 입력으로 서브 캐릭터를 어떤 방향으로 보내고, 그곳의 적과 “a second mode in which the battle automatically proceeds”(전투가 자동으로 진행되는 제2 모드)가 시작됩니다.61

Engadget은 2025년 11월 4일, USPTO 청장이 직접 이 특허의 재심사를 명령했으며, 2002년 Konami 출원과 그보다 앞선 Nintendo 간행물을 선행 기술로 들었다고 보도했습니다.7778 법률사무소 MBHB는 2026년 4월 3일, 재심사 No. 90/020,162에서 2026년 3월 25일자로 첫 Office Action이 발송되어 특허의 모든 청구항이 35 U.S.C. § 103에 따라 자명하다는 이유로 거절되었으며, 응답 기한은 2026년 6월 25일, 연장하면 2026년 9월 25일이라고 썼습니다.79 Nintendo의 응답이나 그 이후의 조치에 관한 보도는 찾지 못했습니다.

각 특허의 청구항 1에서 고른 단계 12개를 JP 7493117, JP 7545191, JP 7528390, US 12,403,397, Kiradex의 다섯 열에 대어 본 행렬. 단계는 요약이지 청구항 전문이 아니며, 법적 주석은 내 해석이다. 입력으로 제어되거나 움직이는 플레이어 캐릭터는 JP 7528390과 US 12,403,397의 단계이고, Kiradex도 이를 한다(수집가가 광장을 걷는다). JP 7493117이 청구하는 것은 방향 입력에 의한 조준, 포획 가능성 표시, 포획 아이템 던지기, 포획 판정. JP 7545191이 청구하는 것은 조준, 포획 아이템 던지기, 포획 판정, 버튼을 누른 채 포획 아이템이나 전투 캐릭터를 준비하고 떼면 던지기, 다른 버튼으로 어느 것인지 고르기, 놓인 전투 캐릭터가 전투를 시작하기. JP 7528390이 청구하는 것은 소유한 여러 탑승 가능 캐릭터 중 하나에 타기, 공중에서 입력으로 나는 탈것에 올라타기. US 12,403,397이 청구하는 것은 조작에 따라 싸우고, 어느 방향으로 보내지면 자동으로 싸우는 소환된 서브 캐릭터. Kiradex는 포획, 전투, 탑승 단계를 하나도 하지 않는다.

읽은 네 특허의 청구항 1에서 고른 포획, 전투, 탑승 단계와 그중 두 건이 공유하는 이동 단계, 그리고 앱. measure_patent_claims.out.txt와 미국 청구항을 바탕으로 figures.py로 그렸습니다.4373

오마주에 주는 의미

제 해석이며, 법률 자문이 아닙니다. 청구항이 제품에 미치는 것은 그 제품이 청구항의 모든 단계를, 법원이 각 단계를 해석하는 대로, 또는 그 균등물로 수행할 때뿐이며, 균등물은 두 나라 법원 모두 인정합니다(7절). Pocketpair는 던지는 소환과 활공을 바꿨고, 침해와 특허의 유효성을 계속 다툰다고 말합니다. Automaton은 그 변경이 원고들이 구버전으로 범위를 좁히는 데 기여했을 수 있다고 보도하면서도, 금지명령은 여전히 청구되어 있다고 전합니다.7429 어느 것도 현재 게임이 청구항 밖에 있다는 판단이 아니며, 어떤 법원도 아직 판단하지 않았습니다. Kiradex는 청구된 단계 하나를 수행합니다. 수집가가 입력으로 필드 위를 움직이는 것으로, 이는 미국 청구항의 첫 단계이자 JP 7528390 단계의 일부이며, 대부분의 게임이 공유하는 단계입니다. Kiradex에는 포획도, 던지는 물체도, 생물도, 전투도, 탈것도 없습니다. 그리고 네 청구항 모두 포획, 전투, 탑승 단계도 요건으로 하므로, 제 해석으로는 그중 어느 것도 Kiradex를 기술하지 않습니다. 이것은 특허 네 건에 대한 해석이지 실시 가능성(freedom-to-operate) 조사가 아닙니다. Nintendo와 The Pokémon Company는 제가 읽지 않은 다른 특허도 갖고 있고, 저는 걸음 수 카운터, 시계로 움직이는 이벤트, 퍼지는 문구에 관한 특허를 조사하지 않았습니다. 14절의 금지 목록은 여기서 읽은 포획, 전투, 탑승 단계로부터 앱을 떼어 놓는 것이며, 그 이상은 아닙니다.

10. 두 회사가 공개하는 것

제가 찾을 수 있는 한, 두 회사 모두 팬 게임에 관한 방침을 공개하지 않았습니다. 공개하는 것은 범위가 더 좁고, 두 문서는 같은 방향을 가리킵니다.

The Pokémon Company의 일본 사이트 규정

일본 공식 사이트의 규정 페이지에는 2차 창작물에 관한 단락이 있고, 그것은 한 방향의 라이선스입니다. ポケモン財産, 즉 포켓몬 재산(페이지는 이를 저작권, 상표, 특허, 영업비밀, 프라이버시권, 퍼블리시티권으로 보호되는 자료로 정의합니다)에 기초한 2차 창작물을 만들거나 이용하는 사람은 누구나 The Pokémon Company 그룹, Nintendo, Creatures, GAME FREAK와 그들이 지정한 자에게 그것을 어떤 목적으로든 이용할 수 있는 비독점적이고, 재허락 가능하며, 무상이고, 영구적이며, 철회 불가능한 전 세계적 라이선스를 부여하게 됩니다. 다음 문장은 個人的な利用を超えた…利用を許諾するものではありません을 제가 옮긴 바로는, 회사들이 당신의 작품을 어떻게 이용하든 그것이 당신에게 포켓몬 재산이나 당신의 2차 창작물을 개인적 이용을 넘어 이용하도록 허락하는 것은 아니라고 말합니다. 준거법은 일본법이고, 도쿄지방재판소가 1심의 전속 관할을 가집니다.60 같은 페이지는 캐릭터나 상품에 관한 기획이나 아이디어를 외부에서 받지 않는다는 것(企画・アイデア…一切公募をしておりません), 그리고 ポケットモンスター, ポケモン, Pokémon이라는 이름이 Nintendo, Creatures, GAME FREAK의 상표라는 것을 밝힙니다.60

pokemon.com의 미국 법적 정보 페이지는 2차 자료들이 영어 팬아트 조항이 있다고 말하는 곳인데, 2026년 10월 4일 제 수집 도구에 봇 확인 화면을 돌려주었고, 그 보관본도 같은 차단을 돌려주었습니다. 저는 그것을 우회하려 하지 않았으므로 그 문면은 여기서 검증되지 않았고, 이 글은 그것을 인용하지 않습니다.80

Nintendo의 게임 콘텐츠 가이드라인

Nintendo의 영상 및 이미지 공유 가이드라인은 영상과 이미지 공유 사이트용으로 만드는 콘텐츠에 “for which Nintendo owns the copyright”(Nintendo가 저작권을 가진) 게임플레이 영상과 스크린샷을 쓰도록 허용하고, “We encourage you to create videos that include your creative input and commentary.”(여러분의 창의적 기여와 해설이 담긴 영상을 만들기를 권장합니다)라고 말합니다. 수익화는 Nintendo가 나열한 방법으로만 허용되며, “you may not sell any videos, music, or images that you created using Nintendo Game Content”(Nintendo 게임 콘텐츠를 사용해 만든 영상, 음악, 이미지를 판매해서는 안 된다)고 합니다. 다른 무언가를 만드는 사람에게 중요한 것은 질문 6입니다. 팬아트, 음악, 그리고 게임플레이 영상과 스크린샷 외의 콘텐츠는 가이드라인 밖에 있으며, “Any other use of Nintendo’s intellectual property and creation of content outside of this scope is subject to the relevant laws of the applicable jurisdiction.”(Nintendo 지식재산의 그 밖의 이용과 이 범위 밖의 콘텐츠 제작은 해당 관할의 관련 법률을 따른다)고 합니다.81

그것이 뜻하는 것

제 해석: 팬 게임을 위한 안전지대는 없습니다. Nintendo의 가이드라인은 영상과 스크린샷을 다루고 나머지는 모두 일반 법률에 맡깁니다. The Pokémon Company의 규정은 2차 창작물을 회사에 라이선스하게 하고, 만든 사람에게는 개인적 이용을 넘어서는 것을 아무것도 라이선스하지 않습니다.8160 대신 존재하는 것은 권리 행사에 관한 재량이고, 8절의 기록이 그 재량이 지금까지 보여 온 모습입니다. Kiradex에 대한 실질적인 귀결은 브리프의 금지 목록에 있는 두 줄입니다. 포켓몬 재산의 2차 창작물이 되는 것은 아무것도 만들지 않을 것. 그리고 어느 회사의 팬 창구나 아이디어 창구에도 아무것도 보내지 않을 것.

11. 트리뷰트 게임, 그들 자신의 말로

Coromon, Nexomon: Extinction, Cassette Beasts, Temtem, Monster Sanctuary, Moonstone Island는 모두 픽셀이나 로우폴리 세계에서 잡고 키우는 루프를 내놓았고, 모두 돈을 받고 팔리며, 제가 찾은 바로는 어느 것도 조치의 대상이 되었다는 보도가 없습니다. 이들이 자신을 어떻게 설명하는지가 이 글에서 가장 실용적인 지침입니다. 그것이 현업 스튜디오들이 실제로 하는 일이기 때문입니다.

스토어 페이지는 누구의 이름도 대지 않는다

저는 일곱 게임, 즉 이 여섯 편과 Palworld의 Steam 스토어 기록을 2026년 10월 4일 Steam의 app details API로 가져와 그 단어를 세었습니다. 짧은 설명과 긴 설명에서 일곱 편 중 어느 것도 “Pokémon”이라고 쓰지 않습니다. 쓰여 있는 것은 “monster-taming RPG”(몬스터 길들이기 RPG, Coromon), “a return to classic monster catching games”(고전 몬스터 포획 게임으로의 귀환, Nexomon: Extinction), “Fusion System”을 갖춘 “Collect awesome monsters”(멋진 몬스터를 모으세요, Cassette Beasts), “an online creature-collection adventure”(온라인 크리처 수집 모험, Temtem), “Monster taming meets metroidvania”(몬스터 길들이기와 메트로배니아의 만남, Monster Sanctuary), “card-based encounters”를 갖춘 “a creature-collecting life-sim”(카드 기반 조우를 갖춘 크리처 수집 생활 시뮬레이션, Moonstone Island), 그리고 “Fight, farm, build and work alongside mysterious creatures”(신비한 생물들과 함께 싸우고, 농사짓고, 짓고, 일하세요, Palworld)입니다.31 그 단어가 들어 있는 기록은 하나뿐입니다. Temtem의 리뷰 인용 필드에 Rock Paper Shotgun이 이 게임을 “A Pokemon-like that listens to what fans want”(팬들이 원하는 것에 귀 기울이는 포켓몬풍 게임)라고 부른 언론 문구가 실려 있습니다.31 이 일곱 기록에서 스튜디오 자신의 말은 팔기 위해 그 이름을 쓰는 일이 결코 없습니다.

인터뷰에서는 자유롭게 이름을 말한다

인터뷰에서는 같은 개발자들이 포켓몬에 대해 터놓고 말합니다. 출발점이 되었고 거기서 멀어져 간 영향으로서입니다. Nintendo Life는 시리즈 30주년을 맞아 2026년 3월 2일 공개한 특집에서 그중 몇 명에게 물었습니다. Crema의 Guillermo Andrades: “In the early days of developing Temtem, we wanted to create almost a 1:1 homage to Pokémon”(Temtem 개발 초기에 저희는 포켓몬에 대한 거의 1:1 오마주를 만들고 싶었습니다). 그 뒤 팀은 “different approaches and unique twists”(다른 접근과 독특한 비틀기)를 위한 여지를 찾았습니다. Nexomon의 리드 개발자 JVemon: “Strong inspirations needed to be drawn if we were to tap into the same player base.”(같은 플레이어층에 닿으려면 강한 영감을 끌어와야 했습니다.) Coromon의 Jochem Pouwels는 긴 풀숲을 “a little slot machine of possibility”(가능성의 작은 슬롯머신)라고 불렀습니다. Moonstone Island의 Sandy Spink: “I got an atomic purple Game Boy Color and Pokémon Blue for my sixth birthday.”(여섯 살 생일에 아토믹 퍼플 게임보이 컬러와 『포켓몬스터 블루』를 받았어요.) 그리고 Bytten Studio의 Tom Coxon: “I’ve never felt like Pokémon was the only thing a monster-collecting RPG could be.”(몬스터 수집 RPG가 포켓몬 말고는 될 수 없다고 느낀 적은 한 번도 없습니다.)32

의도를 가장 분명하게 밝힌 것은 Cassette Beasts입니다. Nintendo Life가 2023년 4월 보도한 바에 따르면 그 출발점의 질문은 “How can two people make a monster-collecting game that does stuff that Pokémon doesn’t do?”(두 사람이 포켓몬이 하지 않는 것을 하는 몬스터 수집 게임을 어떻게 만들 수 있을까?)였습니다. Jay Baylis: “We love Pokémon, sure, but we’re not making a game meant to be a tribute or derivative.”(물론 포켓몬을 사랑하지만, 트리뷰트나 파생작이 되려는 게임을 만드는 건 아닙니다.)82 Temtem의 2018년 4월 발표는 Gematsu가 그 매체 자신의 말로 “a massively multiplayer creature collection adventure game inspired by Pokemon”(포켓몬에서 영감을 받은 대규모 멀티플레이어 크리처 수집 모험 게임)이라고 보도했습니다.83

왜 효과가 있는가

제 해석: 이 스튜디오들 사이에서 실제로 작동하는 규범은 법과 가이드라인이 가리키는 것과 같습니다. 어디서 왔는지 설명하려고 대화에서 포켓몬의 이름을 말하는 것은 괜찮습니다. 팔기 위해서는 결코 쓰지 않습니다. 모든 것을 직접 그립니다. 그리고 루프를 자기 것이라 할 만큼 충분히 바꿉니다(Cassette Beasts의 융합, Moonstone Island의 배틀 대신 카드). Kiradex는 그 어느 것보다 이 장르에서 멀리 있습니다. 생물도, 포획도, 배틀도 전혀 없고, 빌리는 것도 더 적습니다. 걷기, 시계, 카드, 말 한 마디입니다.

12. 기술을 숫자가 있는 규칙으로

브리프는 다음 규칙들로 만들어집니다. 각 규칙은 메커니즘을 일반적인 말로 서술하고, 그것이 기대는 측정된 사실을 밝힙니다. 숫자는 옛 게임의 숫자이며, 저희 자체 조정의 출발점으로 간직할 뿐 가져올 테이블로 쓰지는 않습니다. 8절의 중국 사건이 그 구분의 이유입니다.69

요소 규칙 출처
걸음 박자 걸음으로 움직이는 것은 매 걸음이 아니라 128~512걸음의 굵은 박자로 진행해, 보상이 계기판이 아니라 사건으로 오게 한다 2세대는 알 256걸음마다, 친밀도 512걸음마다. 3세대는 128걸음마다 지닌 포켓몬마다 50퍼센트 친밀도 추첨, 알은 256걸음마다
걸음 예산 걷는 양으로 제한되는 것은 초가 아니라 걸음으로 쓴다. 짧은·중간·긴 보호는 100, 200, 250걸음, 나들이 한 번은 500걸음 스프레이(1세대부터 3세대까지 불변), 『에메랄드』의 사파리존
하루의 구간 기기 자체 시계로 하루를 이름 붙은 몇 구간으로 자른다. 저희 것은 6, 9, 17, 20시이고 게임의 4, 10, 18시가 아니다 『크리스탈』의 TimesOfDay, Kiradex의 Daylight.Phase
약속 정해진 요일에 반복되는 이벤트, 고정된 한 요일의 주간 추첨, 연락처 한 명당 요일마다 최대 한 개의 창 세 요일에 20분씩 벌레잡기대회, 금요일의 럭키 넘버, 재대전 창 24개
성장 네 단계, 마지막 단계는 앞의 세 단계 각각의 네 배 길이(브리프에서는 광장 걸음으로 256, 256, 256, 1,024걸음). 돌아왔을 때 흐른 시간으로 계산. 익은 수확물은 단계 길이 네 개만큼 기다린 뒤 떨어지고, 아주 긴 부재만이 식물을 지운다 『에메랄드』 나무열매: 4~96시간, 열매 맺음 단계가 끝나면 수확되지 않은 열매는 사라지고, 단계 길이 71개만큼 자리를 비우면 나무가 지워짐
안전한 방 그 안에 서 있는 동안에는 하루의 변화가 결코 발동하지 않는 장소 『에메랄드』는 포켓몬센터 안에서 하루 갱신을 건너뜀
별 별 네 개, 플레이 종류 네 가지, 별마다 카드 색이 바뀜. 한 활동에 별 두 개는 없고, 살 수 있는 별은 결코 없다 『에메랄드』의 별 네 개와 카드 색 다섯 가지
격자 박스는 30칸 한 페이지, 6×5 3세대 박스, 박스당 20에서 늘어남
턱 루트에 두고 마을에는 결코 두지 않는다. 첫 루트에 턱 셀 10~25개 『에메랄드』: 루트에 턱 셀 726개, 마을 7곳에 0개, 101~104번도로에 13~24개
연승 일곱 개씩의 세트, 5세트와 10세트에 이정표 타워의 7전 도전, 35번째와 70번째 배틀의 브레인
퍼지는 말 한 마디 점수는 정해진 범위 안의 무작위 값에서 시작해 하루 5씩 움직이고, 정점에서 식상해지고 0에서 다시 신선해진다. 새것은 점수가 더 높을 때만 옛것을 대체한다. 두 장소가 만나면 공유된 말은 점수가 높은 쪽이 이긴다. 다섯 개를 보관한다 『에메랄드』의 유행어, 점수는 30~127에서 시작. 『에메랄드』는 세이브의 첫 문구를 무조건 들이고 완전한 동점을 동전 던지기로 정하는데, 브리프는 둘 다 빼고 범위도 자체적으로 정한다
희소한 스승 찾기 어려운 스승 한 명(저희 스승은 한 번에 한 방에 있고 매주 옮겨 간다), 접촉으로 만남. 만날 때마다(하루 최대 한 번) 숨겨진 목록의 다음 단어를 정해진 순서로 가르친다 유행을 좇는 사람: 플레이어 다섯 명 중 한 명, 숨겨진 단어 33개
컬렉션 추첨 연구했을 뿐 만들지 않는다. 플레이어가 가진 모든 것과 맞춰 보는 추첨은 큰 컬렉션에 보답하지만 상품이 무작위이고, 이 시리즈의 꾸미기 아이템은 결코 무작위가 아니다 『에메랄드』의 복권 코너, 『크리스탈』의 주간 럭키 넘버, 캐릭터 글의 꾸미기 규칙
방해 요청받지 않은 방해는 모두, 한 번 일어날 때마다 가장 길게 다시 시작하는 타이머와 동전 던지기로 막고, 출입구에서는 결코 일으키지 않는다 『크리스탈』의 전화 타이머: 전화 뒤 20분, 오지 않는 동안 10분, 5분, 3분, 그리고 50퍼센트 추첨
상한 만든 장소의 물건 16개, 침실 12개, 보관하는 다른 사람의 장소 20곳 『에메랄드』의 비밀기지, 침실, 기지 수 상한
다른 사람의 세계 다른 플레이어의 장소, 뉴스, 말 한 마디가 같은 시간에 온라인일 필요 없이 내 세계에 도착하게 한다 『에메랄드』의 5,188바이트 교환 기록
표현 메커니즘에 자기 자신의 표현을 더한다. 게임의 이름, 아트, 음악, 텍스트, 코드는 쓰지 않는다 2016년부터 2024년까지의 기록, Circular 33
청구된 단계 읽은 청구항의 포획, 전투, 탑승 단계를 뺀다. 조준해 던지는 포획 아이템 없음, 포획 표시 없음, 놓아 보내는 전투 동료 없음, 공중 탈것 없음, 두 모드로 싸우는 소환 도우미 없음 JP 7493117, 7545191, 7528390, US 12,403,397

표의 출처: 걸음 수 카운터.121415411716 시계.1845192146223 카드와 박스.2324 턱.39 연승.25 기록 교환.4285826 추첨.5636 전화.59 기록과 청구항.4411121361

두 규칙에는 한 문장씩 덧붙일 가치가 있습니다. 안전한 방은 코드를 읽지 않았다면 떠올리지 못했을 규칙입니다. 스스로 변하는 세계에는 변하지 않는 곳이 필요하고, Kiradex에서 그곳은 수집가 자신의 방입니다. 그리고 표현 규칙은 법적인 후반부 전체를 한 줄로 줄인 것이며, 그래서 면책 문구가 아니라 설계 표 안에 있습니다. 포지가 팔레트를 따르듯 한 픽셀 한 픽셀 따르는 규칙입니다.

13. Apple 방식: 세계 안의 걸음, 달력에서 얻는 하루

브리프의 어느 부분에도 새 프레임워크는 필요하지 않습니다. 필요한 것은 두 가지 결정을 올바르게 내리는 것입니다. 걸음은 어디서 오는가, 그리고 하루란 무엇인가.

한 걸음은 거리가 아니라 광장에서의 한 걸음

iOS에는 사람의 실제 걸음을 세는 방법이 두 가지 있습니다. Core Motion의 CMPedometer는 iOS 8.0부터 쓸 수 있으며 “An object for fetching the system-generated live walking data”(시스템이 생성하는 실시간 보행 데이터를 가져오는 객체)이고, 쓰려면 앱의 Info.plist에 시스템이 권한 요청 창에 보여 줄 사용 목적 설명이 있어야 합니다. HealthKit의 stepCount 수량 유형도 iOS 8.0부터이며 “A quantity sample type that measures the number of steps the user has taken”(사용자가 걸은 걸음 수를 측정하는 수량 샘플 유형)입니다.8485

브리프는 둘 다 쓰지 않습니다. 14절의 화분을 키우는 걸음은 광장에서의 걸음입니다. 서버는 이미 걸을 수 없는 타일로의 이동을 거부하고, 수집가가 얼마나 자주 움직일 수 있는지에 속도 제한을 둡니다. 이동이 이웃 타일로 가는 것인지는 아직 검사하지 않으므로, 한 걸음을 센다는 것은 한 타일짜리 수락된 이동을 센다는 뜻이 되며, 브리프의 인수 테스트가 이를 고정합니다.86 제 해석: 픽셀 장식을 키우려고 아이들용 앱이 모션이나 건강 권한을 요청하는 것은 비례에 맞지 않습니다. 수집과 아무 상관 없는 건강 권한을 수집 앱에 넣게 되고, 화분을 피트니스 트래커로 만들어 버리는데, 그것은 다른 제품입니다. 옛 게임들도 세계 안의 걸음을 셌습니다.

하루는 수집가의 달력상 하루

Kiradex는 이미 기기 시계에서 시각을 읽습니다. Daylight.Phase(hour:)는 6~9시를 아침, 9~17시를 낮, 17~20시를 저녁, 나머지를 밤으로 대응시키고, -plazaHour 실행 인자가 UI 테스트를 위해 시각을 고정합니다.45 하루 한 번 일어나는 이벤트에는 생각이 하나 더 필요합니다. 날짜 키입니다. Foundation의 Calendar가 그것을 바로 줍니다. startOfDay(for:)는 “the first moment of a given Date”(주어진 Date의 첫 순간)를 돌려주고, isDate(_:inSameDayAs:)는 두 날짜가 같은 날에 속하는지 답합니다. 둘 다 iOS 8.0부터 쓸 수 있으며, Calendar.current를 넘기면 수집가 자신의 달력으로 답합니다.8788 아래는 아침 상자를 확인하는 스케치이며 아직 앱에는 없습니다. 상자는 Daylight 아침의 시작인 06:00에 도착해 열릴 때까지 기다리므로, 확인이 묻는 것은 오늘의 상자가 도착했는지와 그것을 열었는지뿐입니다. 시각은 광장의 스테이지가 이미 하는 방식대로 읽습니다. 테스트가 -plazaHour로 앱을 실행하면 Daylight.forcedHour에서, 그렇지 않으면 수집가의 시계에서 읽으므로, 브리프의 UI 테스트로 움직일 수 있습니다.

/// Whether a crate is waiting for this collector now: today's crate has
/// arrived (it comes at 06:00, the start of Daylight's morning) and they
/// have not opened one today. It does not leave at 09:00.
func crateIsWaiting(lastOpened: Date?, now: Date = .now,
                    calendar: Calendar = .current) -> Bool {
    let hour = Daylight.forcedHour ?? calendar.component(.hour, from: now)
    guard hour >= 6 else { return false }
    guard let lastOpened else { return true }
    return !calendar.isDate(lastOpened, inSameDayAs: now)
}

이것은 모양으로 보면 『에메랄드』의 UpdatePerDay입니다. 하루의 상태는 도착할 때 날짜에서 계산되고, 그것이 맞기 위해 계속 돌아가야 하는 것은 아무것도 없습니다.22 자정을 넘겨 열려 있는 앱을 위해서는 두 가지 알림이 확인을 다시 활성화합니다. NSCalendarDayChanged는 “posted whenever the calendar day of the system changes, as determined by the system calendar, locale, and time zone”(시스템 달력, 로케일, 시간대에 따라 결정되는 시스템의 날짜가 바뀔 때마다 게시된다)이며 iOS 8.0부터 있습니다. UIKit의 significantTimeChangeNotification은 “a change to a new day (midnight), a carrier time update, or a change to, or from, daylight savings time”(새로운 날로의 변경(자정), 통신사 시간 갱신, 일광 절약 시간의 시작이나 종료)에 게시됩니다.8990

서버에 필요한 것

광장의 서버는 지금 접속 상태 전용입니다. 위치와 미리 준비된 대사를 중계할 뿐 아무것도 저장하지 않습니다.8633 브리프의 두 항목이 그것을 바꾸며, 둘은 종류가 다릅니다. 퍼지는 말 한 마디에는 광장 방마다 작은 영구 기록이 필요합니다. 단어 인덱스 두 개, 점수, 정점, 흐름의 방향, 그리고 흐름을 마지막으로 적용한 서버 날짜이며, 누가 그 말을 제안했거나 옮겼는지는 아무것도 담지 않습니다. 그 기록은 사람이 아니라 방에 속합니다. 주간 홀의 로제트에는 수집가별 참가 횟수가 필요하고, 이것은 사람에게 속합니다. 참가 이력이며, 서버가 수집가를 식별하는 키인 식별자에 연결해 저장됩니다. 지금 그 식별자는 앱이 스스로 만드는 것입니다. 수집가가 처음 광장에 들어올 때 기기에서 생성되는 UUID로, 앱 저장소에 보관되고 연결할 때마다 전송되며, 서버는 그것을 UUID로 읽습니다.86 앱의 세계 설계 문서는 대신 Game Center 플레이어 id를 서버의 키로 삼을 계획이며, 그에 대해 이렇게 말합니다. “That is a persistent identifier, which COPPA counts as personal information when combined with other data”(그것은 영구 식별자이며, COPPA는 다른 데이터와 결합될 때 이를 개인정보로 본다). 그래서 설계에는 개인정보 처리방침이 있고, 서드파티 분석도 광고도 없으며, “deletion on request”(요청 시 삭제)가 있고, “to collect as little as possible from anyone”(누구에게서든 가능한 한 적게 수집하도록) 만들어집니다.37 제 해석으로는 앱 자체의 UUID도 한 번 만들어져 보관되므로 영구 식별자이고, 따라서 참가 횟수가 두 식별자 중 어느 쪽에 연결되어 저장되든 그 규칙들이 적용됩니다(방법은 브리프의 항목 5에 있습니다). 제 해석: 말 한 마디의 매일의 흐름처럼 수집가들 사이에 공유되는 것은 모두 휴대폰이 아니라 서버의 날짜로 돌려야 합니다. 휴대폰 시계는 앞으로 돌릴 수 있기 때문입니다. 상자처럼 개인적이고 장식적인 것은 휴대폰을 믿어도 됩니다. 스티커를 일찍 열려고 자기 시계를 앞으로 돌려도 아무도 손해 보지 않기 때문입니다.

비용

여기 있는 어떤 것도 아직 만들어지지 않았으므로, 아무것도 측정하지 않았습니다. 날짜 키는 달력 호출 한 번이고, 걸음 수 카운터는 수집가 한 명당 정수 하나입니다. 둘 다 프로파일에 나타나지 않으리라 예상하지만, 빌드를 휴대폰에서 측정하기 전까지는 사실로 말하지 않겠습니다.

14. 브리프: Kiradex가 만드는 것과 통과해야 할 확인

이 절은 앱을 위해 쓴 제 종합입니다. 모든 요소는 2절부터 6절까지의 메커니즘 하나를 간직하고, 표현은 모두 Kiradex 자신의 것으로 바꿉니다. 자체 팔레트, 포지로 그린 타일, 미리 준비된 대사, 키라 별입니다. 각각 닮아서는 안 되는 것과 테스트, 캡처, 스크립트가 실행할 수 있는 확인을 밝힙니다. 법적 주석은 해석이지 자문이 아닙니다.

이미 있고 그 위에 쌓는 것: 16픽셀 타일로 된 광장(미리 준비된 대사는 서버가 보관하고, 서버는 접속 상태 전용이라 아무것도 저장하지 않음). 자체 구간(아침 6~9시, 낮 9~17시, 저녁 17~20시, 밤)을 가진 Daylight.swift로, 이미 『크리스탈』의 4, 10, 18시가 아니며 앞으로도 그대로입니다. 테마가 있는 주간 홀. 실제 스캔에서 나온 후원자 등급, 핀, 레벨이 담긴 수집가 카드. 그리고 수집가마다의 방.86453533

1. 창턱의 화분: 방 안의 무언가를 키우는 걸음 수 카운터

  • 메커니즘. 모든 수집가의 방 창가에 화분이 하나 있습니다. 광장과 루트에서의 걸음이 그것을 키웁니다. 256걸음마다 성장 단계가 하나 오르고, 단계는 넷(모종판, 새싹, 잎이 무성함, 꽃핌)입니다. 마지막 단계는 네 배 길게 이어진 뒤 압화 하나를 떨어뜨립니다. 압화는 방 장식이며, 마을의 팔레트 램프 14개 중 정해진 순서로 다음 램프의 색이고 결코 무작위가 아닙니다. 그리고 식물은 새싹부터 다시 시작합니다. 방 안의 걸음은 결코 세지 않습니다. 방은 안전한 곳입니다. 『에메랄드』가 비밀기지 안에서 독을, 포켓몬센터 안에서 하루 갱신을 멈추는 것과 같습니다. (규칙: 걸음 박자, 성장, 안전한 방.)1142234
  • 이유. 걷기는 광장의 변하지 않는 단 하나의 동사입니다. 굵은 박자는 꽃을 사건으로 만듭니다. 그리고 꽃은 놓을 수 있는 것이라 방을 채우는 데 이어집니다.
  • 걸음은 광장의 걸음이지 건강 데이터가 아닙니다. Core Motion도 HealthKit도 쓰지 않습니다(13절).
  • 닮아서는 안 되는 것. 알, 부화기, 부화하는 모든 것, 나무열매 나무, 나무열매 이름이나 스프라이트, 수확량 단계와 묶인 물 주기 장치, 키우미집. 생물로 변하는 것은 무엇이든 안 됩니다. 어떤 문자열에도 “berry”, “egg”, “hatch”(열매, 알, 부화)를 넣지 않습니다.
  • 인수 기준. 서버 테스트가 봇을 한 타일씩 2,048걸음 걷게 하고, 256, 512, 768걸음에서 단계가 바뀌고, 1,792걸음에서 압화 하나가 떨어지고 식물이 새싹으로 돌아가며(꽃핌 단계는 1,024걸음 이어짐), 다음 변화가 2,048걸음에서 일어나고, 방 맵 안의 걸음과 두 타일 이상의 수락된 이동에는 변화가 없음을 확인합니다. 단계마다 방을 캡처하면 포지로 그린 식물이 보이고, 팔레트 검사는 모든 픽셀이 포지의 팔레트 안에 있음을 확인합니다.

2. 아침 상자: 아침 이벤트가 있는 하루 시계

  • 메커니즘. Kiradex 자체의 아침이 시작되는 때, 수집가의 시계로 06:00(Daylight.Phase.morning은 6시에 시작)에 카드 가게 앞으로 배달 상자가 도착하고, 열릴 때까지 그 자리에 있습니다. 열면 정해진 목록의 다음 것을 받습니다. 스티커, 프레임 색, 또는 말 한 마디에 쓸 단어(항목 6)입니다. 상자는 하루에 하나이고 결코 쌓이지 않습니다. 하루의 상태는 도착할 때 현지 날짜로 계산하며, 돌아가는 타이머에 의존하지 않습니다. (규칙: 하루의 구간, 약속, 성장.)4522
  • 카운트다운도, 운도 없음. 이 시리즈의 꾸미기 아이템 규칙은 “never random, never on a countdown”(절대 무작위가 아니고, 절대 카운트다운이 아니다)입니다.36 그래서 상자에는 마감이 없습니다. 09:00에 사라지지 않고, 내용물은 한 목록에서 순서대로 나오므로 하루를 건너뛰어도 다음 스티커가 늦어질 뿐 결코 잃지 않습니다. 아침은 상자가 도착하는 때이지, 놓치면 안 되는 시간 창이 아닙니다.
  • 한 주의 모양. 『크리스탈』처럼 한 주에 이름 붙은 요일을 주되, 약속은 하루에 많아야 하나입니다. 홀의 심사일은 계획대로 매주 한 번이고, 평일 중 하루 저녁에는 가게 주인이 진열창을 다시 꾸밉니다.1921
  • 닮아서는 안 되는 것. 벌레잡기대회(화요일, 목요일, 토요일의 시간제한 포획), Kurt의 볼 만들기, 라디오 복권 방송, 포켓기어나 전화. 게임 안의 전화는 일절 없습니다.
  • 인수 기준. -plazaHour 7로 실행한 UI 테스트는 열리지 않은 상자를 보여 주고, -plazaHour 21로 실행한 것도 마찬가지입니다. -plazaHour 5로 실행한 것은 아직 아무것도 보여 주지 않습니다. 날짜 키의 단위 테스트는 같은 현지 날짜에 두 번 연 상자가 한 번만 지급하고, 날짜를 하루 앞으로 옮기면 다시 활성화됨을 보여 줍니다. 사흘을 건너뛴 뒤 상자를 여는 테스트는 세 칸 뒤의 것이 아니라 목록의 다음 아이템을 받습니다.

3. 별이 붙은 수집가 카드

  • 메커니즘. 누군가 나를 탭하면 열리는 카드에 별이 최대 네 개 붙습니다. 별마다 다른 종류의 플레이이고, 카드 테두리는 별이 늘 때마다 Kiradex 고유의 순서로 바뀝니다. 별이 없으면 무지, 그다음 무광, 포일 테두리, 홀로 테두리, 그리고 네 개면 풀 키라입니다. 제안하는 별은 모두 실제 수집이나 광장 플레이에서 나옵니다. 스캔으로 실제 세트 하나 완성하기, 서로 다른 방 100곳 방문하기, 주간 홀에서 입상하기, 그리고 서로 다른 30일에 스캔하기입니다. 후원자 등급은 카드의 별도 줄로 남고, 결코 별이 되지 않습니다. (규칙: 별.)23
  • 왜 30일 연속이 아닌가. 자료집은 30일 스캔 연속 기록을 제안했습니다. 저는 그것을 결코 만료되지 않는 서로 다른 30일로 바꿨습니다. 끊기는 연속 기록은 일주일 자리를 비운 아이를 벌주기 때문이고, 이 시리즈의 캐릭터 글이 기록하듯 PEGI가 2026년 6월부터 만료되는 로그인 연속 기록을 등급 심사에 반영하기 때문입니다.3336
  • 닮아서는 안 되는 것. “트레이너 카드”라는 이름. 트레이너 카드의 레이아웃(오른쪽에 초상, 아래쪽에 배지 줄, ID 번호와 소지금). 초록, 브론즈, 구리색, 은색, 금색의 카드 팔레트. 배지 모양. 체육관 언급. 전당 등록 시간. 별은 Kiradex의 키라 별로만 그립니다.
  • 인수 기준. 스냅샷 테스트가 카드를 별 0~4개로 렌더링해 다섯 테두리가 그 순서로 나오는지 확인합니다. 단위 테스트가 어떤 구매 경로도 별을 설정하지 않음을 증명합니다(StoreKit 거래는 별 필드에 결코 닿지 않음). 문자열 카탈로그에서 “Trainer”를 검색하면 아무것도 나오지 않습니다.

4. 루트 위의 일방통행 턱

  • 메커니즘. 광장 너머의 루트에 한 칸 높이의 일방통행 턱을 둡니다. 걸어 내려가면 한 줄 내려가고, 다시는 올라갈 수 없습니다. 턱이 이어진 곳마다 돌아오는 길이 다른 경로가 되므로 짧은 루트에 고리가 생깁니다. 첫 루트에 턱 셀 10~25개, 101~104번도로의 13~24개에 맞춘 수입니다. 마을에는 두지 않습니다. (규칙: 턱.)39
  • 누가 결정하는가. 건물 조사는 위에서 내려다보면 자유로운 높이를 읽기 어렵다는 이유로 턱을 거부했습니다. 한 칸짜리 일방통행 턱에는 높이가 없고, 보행 그래프 안의 방향 있는 간선이 있을 뿐입니다. 이 브리프는 거부를 뒤집지 않고 범위를 좁히며, 결정은 이 시리즈의 고저와 루트에 관한 글이 맡습니다.3533
  • 닮아서는 안 되는 것. 포켓몬의 턱 타일(위쪽 가장자리가 밝은 풀 테두리와 어두운 그림자 선), 그 점프 애니메이션이나 효과음. 포지에서 Kiradex 팔레트로 돌 경계석이나 생울타리 계단처럼, 자체 낙하 프레임과 함께 그립니다.
  • 인수 기준. 서버의 보행 검증에 턱 셀의 방향 있는 간선이 들어갑니다. 테스트가 반대 방향 걸음이 거부됨을 확인합니다. 너비 우선 탐색 스크립트가 가는 길과 다른 돌아오는 길을 보고합니다.

5. 일곱 번씩의 세트가 있는 주간 홀

  • 메커니즘. 홀이 이미 계획한 주간 심사는 그대로 둡니다. 거기에 이기는 것이 아니라 참가하는 것에 프런티어의 모양을 더합니다. 참가 일곱 번마다 수집가 카드에 홀 로제트가 하나 붙고, 참가 35번과 70번, 즉 5세트와 10세트에서 홀 관리인이 그 전시를 보러 나옵니다. 참가는 연속된 주에만이 아니라 언제 했든 셉니다. 이유는 항목 3과 같습니다. 로제트는 참가와 입상에서 오고, 결코 구매에서 오지 않습니다. (규칙: 연승.)25
  • 데이터. 참가 횟수는 수집가의 식별자에 묶인 참가 이력이므로 앱 자체의 규칙상 개인정보입니다. 서버가 수집가를 식별하는 키인 단 하나의 식별자(그때 무엇이든)에 연결해 저장하고, 그 밖의 무엇에도 연결하지 않습니다(지금은 앱이 광장을 위해 생성하는 UUID, 세계 설계 문서의 계획대로 서버가 Game Center 플레이어 id를 키로 삼게 되면 그것이며, 어느 쪽이든 영구 식별자입니다). 개인정보 처리방침의 적용을 받고, 분석이나 광고로는 결코 보내지 않으며, 삭제 요청이 있으면 수집가의 나머지 기록과 함께 지웁니다. 누계 하나만 두고 개별 참가의 로그는 남기지 않습니다. 세계 설계 문서는 보존 기간을 정하지 않았습니다. 그것은 설계 문서가 이미 요구하고 있는 변호사의 검토에 맡길 일입니다.3786
  • 닮아서는 안 되는 것. 콘테스트 부문(멋짐, 아름다움, 귀여움, 슬기로움, 강인함), 랭크 이름(노말, 슈퍼, 하이퍼, 마스터), 콘테스트 홀의 무대, 어필 라운드, 배틀타워, 프런티어 심벌, 포켓몬 리본 디자인. Kiradex의 로제트는 자체 팔레트로 그린 자체의 것입니다.
  • 인수 기준. 서버 테스트가 모의 참가자를 70번 참가시키고 7, 14번 등에서 로제트가, 35번과 70번에서 관리인의 방문이 일어남을 확인합니다. 최상위 후원자로 테스트해도 채점에 차이가 없음을 보여 줍니다. 삭제 테스트는 수집가를 삭제한 뒤 그 식별자 아래 참가 횟수가 남아 있지 않음을 확인합니다.

6. 이번 주의 말 한 마디: 광장에서 광장으로 퍼지는 문구

  • 메커니즘. 광장의 방마다 말 한 마디를 가집니다. Kiradex 자체의 미리 준비된 어휘에서 고른 두 단어로, 감정을 나타내는 말과 수집에 관한 말의 조합입니다(“lucky binder”, “quiet holo”). 한 쌍이 제안되면 서버는 그것에 25에서 100 사이의 정점을 줍니다. Kiradex 자체의 범위입니다(『에메랄드』의 범위는 7비트 필드의 상한 아래인 30~127입니다). 시작 점수는 25에서 그 정점 사이입니다. 점수는 정점까지 하루 5씩 오르고 정점에서 말이 식상해지며, 그다음 하루 5씩 바닥인 0까지 내려가 거기서 신선해져 다시 오릅니다. 하루의 이동이 정점이나 바닥을 넘을 경우 거기서 멈춥니다. 수집가는 게시판에서 새 쌍을 제안할 수 있습니다. 그것이 방을 차지하는 것은 점수가 엄밀히 더 높을 때뿐이고, 동점이면 방이 자기 것을 지킵니다. 이것은 Kiradex의 단순화입니다. 『에메랄드』는 세이브의 첫 문구를 비교 없이 들이고 완전한 동점을 동전 던지기로 정합니다. 수집가가 방에서 방으로 옮겨 가면 말 한 마디가 그와 함께 여행하고, 두 방의 말이 만나는 곳에서는 점수가 높은 쪽이 이깁니다. 마을의 수집가들은 지금의 말 한 마디를 되풀이합니다. 그중 한 명인 단어 수집가는 한 번에 한 방에 있고 매주 옮겨 다닙니다. 그와 이야기하면 숨겨진 목록의 다음 미리 준비된 단어가, 정해진 순서로, 결코 무작위가 아니게, 하루에 최대 한 단어씩 풀립니다. (규칙: 퍼지는 말 한 마디, 희소한 스승.)428
  • 서버. 방마다 작은 영구 기록을 둡니다. 단어 인덱스 두 개, 점수, 정점, 흐름의 방향, 그리고 흐름을 마지막으로 적용한 서버 날짜입니다. 읽을 때 서버는 그 날짜 이후 지난 하루마다 5포인트를 하루씩 차례로 적용한 뒤 오늘 날짜를 저장합니다. 그러면 방을 몇 번 읽든, 서버가 다시 시작하든 하루는 한 번만 적용됩니다. 『에메랄드』의 UpdatePerDay도 저장된 날짜 수로 같은 일을 합니다. 그것을 오늘 것과 비교하고, 차이를 유행어에 넘긴 다음 오늘 것을 저장합니다.22 기록은 방에 속합니다. 누가 말을 제안했거나 옮겼는지는 아무것도 담지 않습니다(13절).
  • 아동 안전. 서버가 보관하고 폐기할 수 있는 목록의 미리 준비된 단어만 씁니다. 광장의 미리 준비된 대사가 이미 그렇습니다. 직접 입력도, 사용자가 만든 단어도 없습니다.86
  • 닮아서는 안 되는 것. Easy Chat의 단어 그룹과 단어(Trendy Sayings 33개 포함), Dewford Hall, Mauville의 노인, 유행을 좇는 사람의 모습, 이름 붙은 기능으로서의 기록 교환, 유행에 관한 TV 방송.
  • 인수 기준. 서버 테스트: 수집가가 방 A에서 방 B로 걸어가면 방 A의 점수 90짜리 말이 방 B의 점수 60짜리 말과 만나고, B의 말이 A의 것이 됩니다. 방의 것과 점수가 같은 새 쌍은 차지하지 못합니다. 흐름 테스트는 점수 45, 상승 중, 정점 60으로 말을 시작합니다. 다음 서버 날짜에 세 번 읽어도 60이 아니라 50입니다. 서버를 다시 시작해도 그 날짜에는 50으로 읽힙니다. 그다음 읽지 않는 열흘이 지나면, 첫 읽기에서 열흘 치가 한꺼번에 적용되어 60까지 올라 식상해지고 20까지 내려갑니다. 하루 한 번씩 읽었을 때와 같습니다. 점수 10의 식상한 말은 사흘 뒤 0을 찍고 상승으로 돌아서 5로 읽힙니다.91 스크립트가 미리 준비된 어휘를 pokeemerald의 Easy Chat 단어 목록과 비교해 공유되는 여러 단어 항목이 없음을 확인합니다(“hello” 같은 흔한 단일 단어는 피할 수 없고 문제없습니다). 단어 수집가 테스트: 수집가가 그와 각각 다른 날에 n번째 대화를 하면 숨겨진 목록의 n번째 단어가 풀리고, 같은 날 반복하면 아무것도 풀리지 않습니다.

금지

  1. 세계 어디에도 포켓몬의 표현을 두지 않습니다: 생물도, 생물의 실루엣이나 그것을 연상시키는 오리지널 생물도, 트레이너, 아이템, 지명, 음악, 효과음, 타일, 스프라이트, 팔레트, 화면 레이아웃도 어떤 포켓몬 게임에서 가져오거나, 따라 그리거나, 다시 그리지 않습니다.37
  2. 프랜차이즈 어휘를 기능 이름으로 쓰지 않습니다: 포켓몬 도감, 몬스터볼, 포켓-이 붙는 모든 것, 트레이너 카드, 체육관, 배지, 사천왕, 전당 등록, 사파리존, 스프레이(Repel), 비밀기지, 기록 교환, Easy Chat, Trendy Saying, 콘테스트, 포켓내비, 포켓기어, Match Call, 배틀서처, 배틀타워, 프런티어. 이 가운데 어느 것이 등록 상표인지는 확인하지 않았습니다. 합쳐 놓으면 제품을 파생작으로 표시하게 되며, 트리뷰트 게임들 자신의 스토어 설명은 시리즈 이름조차 쓰지 않고 해냅니다.31
  3. 청구된 포획, 전투, 탑승 단계를 하나도 하지 않습니다: 무엇을 포획하려고 조준해 던지는 것 없음, 포획 가능성 표시 없음, 싸우라고 놓아 보내는 동료 없음, 날거나 활공하는 탈것 없음, 두 모드로 싸우는 소환 도우미 없음.11121361
  4. 디컴파일의 코드나 데이터를 쓰지 않습니다: 앱에도 포지에도 넣지 않습니다. 디컴파일은 연구와 측정을 위한 것이고, 그 코드와 에셋은 게임에서 파생된 것입니다.
  5. 마케팅에서 “Pokémon”은 이름을 설명적으로 쓰는 한 줄을 넘지 않습니다: 앱 자체의 규칙이 허용하는 한 줄입니다. App Store 이름, 부제, 아이콘, 스크린샷, 광고, 트레일러에는 넣지 않습니다.3731
  6. 포켓몬 향수에 기댄 크라우드펀딩이나 언론 홍보를 하지 않습니다. 언론, 그리고 자금 조달이 The Pokémon Company의 전 최고법무책임자가 말한 방아쇠입니다.67
  7. 도박의 모양을 띠지 않고, 꾸미기 아이템에 운을 넣지 않습니다: 슬롯머신 없음, 게임코너 없음, 추첨 없음, 무작위 아이템 없음. 유료든 무료든.3336
  8. The Pokémon Company나 Nintendo에 아이디어나 팬 작품을 보내지 않습니다. 두 회사의 팬 창구나 아이디어 창구도 쓰지 않습니다. 두 회사의 규정은 그런 작품을 자사에 라이선스하게 하고, 요청하지 않은 아이디어는 받지 않는다고 말합니다.60
  9. 식별에 필요한 범위를 넘어 카드 이미지를 쓰지 않습니다: 번들에 넣지 않고, 마케팅 아트에 쓰지 않으며, 굿즈에 넣지 않습니다.37
  10. 게임 보상에 건강 데이터나 모션 데이터를 쓰지 않습니다(13절).

이 브리프에 없는 것

코인과 게임코너(위에서 거부함). 매일의 추첨(스캔한 카드의 컬렉터 번호와 맞춰 보는 버전을 초안으로 썼다가 상품이 무작위라서 뺐습니다). 전화와 TV(광장의 미리 준비된 대사가 이미 말을 하고, 아이의 휴대폰에 전화를 거는 세계는 제가 만들고 싶은 세계가 아닙니다). 대량 발생과 무리(무리 지을 생물이 없습니다). PC 박스(컬렉션을 한 페이지에 어떻게 정리할지는 방에 관한 글의 몫입니다). 자전거와 풀베기 나무(루트에 속합니다). 비밀기지 상한(방의 상한은 방에 관한 글이 맡습니다). 그리고 포켓슬론에서 온 모든 것.

정직한 한계

읽은 특허는 네 건으로, 일본 것 세 건과 미국 것 한 건이며, Google Patents에서 가져왔고 일본 청구항은 기계 번역으로 읽었습니다. 걸음 수 카운터, 시계, 퍼지는 문구에 관한 특허 조사는 하지 않았고, 변호사와 상담하지도 않았습니다. Palworld 사건은 2026년 10월 4일에도 계속 중이었습니다. 기술 설명회가 10월 1일로 예정되어 있었지만 결과는 보도되지 않았고, 재판부의 예비 견해는 11월 9일로 예정되어 있습니다. 미국 재심사의 다음 단계는 보도되지 않았습니다. The Pokémon Company의 미국 법적 정보 페이지는 접근할 수 없었습니다. 위의 모든 항목은 저희 자신의 표현으로 써도 된다고 제가 믿는 메커니즘이며, 그 믿음 하나하나가 해석입니다.297980

핵심 요약

아트를 그리는 사람에게

  • 모든 픽셀을 자기 팔레트와 자기 규칙으로 직접 그리십시오. 기록에서 조치를 부른 팬 프로젝트는 모두 게임 자체의 이름, 아트, 코드를 썼거나 그것을 쓴 게임에 링크를 걸었습니다.5678
  • 메커니즘이 표현이 아니더라도 메커니즘의 겉모습은 표현입니다. 턱은 돌 경계석이 될 수 있고, 별은 나만의 별이 될 수 있고, 카드의 색은 나만의 순서가 될 수 있습니다. 그리기 전에 각 요소가 무엇을 닮아서는 안 되는지 적어 두십시오.
  • 어휘는 자기 것으로 하십시오. 트레이너 카드, 사파리존, 비밀기지 같은 말은 제품을 파생작으로 표시합니다. 트리뷰트 게임들 자신의 스토어 설명은 시리즈 이름조차 쓰지 않고 해냅니다.31

엔진을 만드는 사람에게

  • 걸음은 사람이 아니라 세계 안에서 세십시오. 서버가 검증한 한 타일 이동을 세고, 장식 때문에 Core Motion이나 HealthKit을 쓰는 일은 결코 없어야 합니다.8684
  • 하루는 도착할 때 날짜 키(startOfDay(for:), isDate(_:inSameDayAs:))로 계산하고, NSCalendarDayChanged로 다시 활성화하며, 백그라운드에서 계속 돌아가는 것은 아무것도 두지 마십시오. 그것이 Swift로 쓴 『에메랄드』의 UpdatePerDay입니다.87888922
  • 공유되는 것은 서버의 시계로, 개인적이고 장식적인 것은 휴대폰의 시계로 돌리십시오.
  • 디컴파일의 코드나 데이터는 결코 출시하지 마십시오. 읽고, 측정하고, 인용하십시오.

루프를 설계하는 사람에게

  • 걷기에는 굵은 박자(128~512걸음)로 보답하고, 예산은 초가 아니라 걸음으로 쓰게 하고, 자리를 비우는 대가는 작게 하십시오. 『에메랄드』의 익은 나무열매는 단계 길이 네 개만큼 기다린 뒤 떨어지고, 아주 긴 부재만이 나무를 지웁니다.1214153
  • 한 주에 이름 붙은 요일을 주고 요일마다 약속은 많아야 하나로 하며, 아무것도 변하지 않는 안전한 방을 하나 두십시오.192122
  • 별 네 개, 플레이 종류 네 가지, 파는 것은 없음. 플레이어가 아이라면 끊기지 않는 연속 기록이 아니라 참가 횟수를 세십시오. 그리고 운이나 시간 제한으로 얻는 꾸미기 아이템은 만들지 마십시오.2336
  • 다른 사람의 세계가 내 세계에 도착하게 하십시오. 점수, 흐름, 접촉 규칙을 가진 말 한 마디는 플레이어들이 만날 때 아무런 알림 없이 여행합니다.426
  • 자기 장르의 특허 청구항을 단계별로 읽고, 내 설계가 실제로 하는 단계(여기서는 입력으로 캐릭터를 움직이는 것이 그중 하나입니다)를 적어 두고, 각 청구항을 그 청구항으로 만드는 단계는 빼십시오. 그리고 어떤 특허를 읽었는지 분명히 밝히십시오. 이것은 제 해석이며 법률 자문이 아닙니다.11121361

자주 묻는 질문

소송당하지 않고 포켓몬에서 영감을 받은 게임을 만들 수 있습니까

누구도 그것을 약속할 수 없고, 이것은 법률 자문이 아닙니다. 그래도 기록은 일관됩니다. 이 기록에서 2016년부터 2024년 사이에 삭제 조치를 부른 팬 프로젝트는 포켓몬 자체의 이름, 아트, 코드를 썼거나 그것을 쓴 게임에 링크를 걸었습니다. 그리고 메커니즘을 두고 다툰 유일한 사건인 Palworld는 포획 아이템을 조준해 던지는 것 같은 특정 단계를 요건으로 하는 청구항의 특허에 기대고 있습니다.567810 저작권은 시스템이나 운용 방법을 보호하지 않지만, 상표는 이름을 보호하고 특허는 게임의 방법을 청구할 수 있습니다.4411 Coromon, Temtem, Cassette Beasts 같은 트리뷰트 게임은 자체 아트로 이 장르를 내놓았고, 제가 센 개발자 작성 필드인 Steam 페이지의 짧은 설명과 긴 설명에서는 그 이름을 결코 쓰지 않습니다. Temtem의 페이지에는 언론 인용 안에 한 번 들어 있습니다.31

Pokémon Uranium은 중지 요청서를 받았습니까

개발자들의 설명으로는 받지 않았습니다. 2016년 8월 13일 Kotaku가 보도한 그들의 성명은 150만 회가 넘는 다운로드 뒤 “been notified of multiple takedown notices from lawyers representing Nintendo of America”(Nintendo of America를 대리하는 변호사들의 여러 삭제 통지에 대해 통보받았다)는 것과 “we have not personally been contacted”(저희는 직접 연락을 받지 않았다)는 것을 말하며, 다운로드 링크는 그들 스스로 내렸습니다.5 Pokémon Prism은 실제로 받았습니다. 2016년 12월 21일, 예정된 공개 나흘 전이었습니다.665

Nintendo와 The Pokémon Company는 어떤 특허로 Palworld를 고소했습니까

2024년 11월 8일 Pocketpair의 보고에 나온 일본 특허 세 건입니다. 제7545191호(준비 자세에서 포획 아이템이나 전투 캐릭터를 조준해 던지며, 아이템이나 캐릭터는 두 번째 버튼으로 고름), 제7493117호(포획이 성공할 가능성의 표시), 제7528390호(소유한 캐릭터에 타기, 공중에서 나는 캐릭터에 올라타는 것 포함). 세 건 모두 2024년, Palworld 출시 이후에, 2021년 12월 22일 출원된 출원까지 우선권이 거슬러 올라가는 분할출원으로 출원되었습니다.1072111213 두 모드로 싸우는 소환된 서브 캐릭터에 관한 미국 특허 12,403,397은 재심사 중이며, Pocketpair를 상대로 한 미국 소송은 보도되지 않았습니다.6179

Palworld 소송은 끝났습니까

2026년 10월 4일 기준으로는 끝나지 않았습니다. Automaton은 2026년 6월 도쿄지방재판소 기록을 근거로, 원고들이 2025년 11월 청구를 Palworld의 구버전으로 좁히면서도 여전히 금지명령을 구하고 있으며, 2026년 10월 1일에 기술 설명회가, 2026년 11월 9일에 재판부의 예비 견해 제시가 예정되어 있다고 보도했습니다. 판결, 화해, 금지명령 중 어느 것도 보도되지 않았고, Pocketpair는 2025년 5월 8일 이후 소송에 관해 아무것도 게시하지 않았습니다.2930

Nintendo는 팬 게임을 허용합니까

제가 찾을 수 있는 한, Nintendo나 포켓몬이 공개한 가이드라인 가운데 팬 게임을 다루는 것은 없습니다. Nintendo의 게임 콘텐츠 가이드라인은 게임플레이 영상과 스크린샷을 다루고, 지식재산의 그 밖의 이용은 “is subject to the relevant laws of the applicable jurisdiction”(해당 관할의 관련 법률을 따른다)고 말합니다. The Pokémon Company의 일본 사이트 규정은 2차 창작물을 회사에 라이선스하게 하고, 만든 사람에게는 개인적 이용을 넘어서는 것을 아무것도 라이선스하지 않습니다.8160 제 해석으로는 안전지대는 없고 권리 행사의 재량만 있을 뿐입니다. 회사의 전 최고법무책임자는 방아쇠가 언론, 그리고 자금 조달이라고 말했습니다.67

옛 포켓몬 게임에서 걸음 수 카운터는 어떻게 동작했습니까

필드의 모든 걸음이 하나의 루틴을 거칩니다. 『금·은·크리스탈』에서는 그 루틴이 256걸음마다 지닌 알을 부화 쪽으로 옮기고, 512걸음마다 지닌 포켓몬의 친밀도를 올리며(친밀도 루틴은 256걸음마다 호출되고 두 번에 한 번 동작합니다), 4걸음마다 독에 걸린 포켓몬에게 피해를 주고, 자전거로 1,024걸음을 달리면 자전거 가게 주인이 전화를 걸게 합니다. 『에메랄드』에서는 128걸음마다 지닌 포켓몬 각각이 50퍼센트 확률로 친밀도를 얻고, 알은 256걸음마다, 지닌 순서대로 부화 준비가 된 첫 알까지 사이클을 하나 잃습니다. 사파리존(500걸음)과 스프레이(100, 200, 250걸음)는 걸어서 쓰는 예산입니다.121415411617

『금·은』의 실시간 시계는 무엇을 바꿨습니까

하루에는 세 구간이 있어서 아침은 4:00부터, 낮은 10:00부터, 밤은 18:00부터입니다. 벌레잡기대회는 화요일, 목요일, 토요일에 20분 동안 열리고, 럭키 넘버 추첨은 매주 금요일입니다. 트레이너 24명은 각자 한 요일의 한 시간대에 재대전 전화를 걸 수 있고, 일일 플래그 16개가 자정에 초기화됩니다.1819214620 『에메랄드』는 그 위에 달력을 더했습니다. 열매를 맺기까지 4~96시간 걸리는 나무열매와, 하루 5포인트씩 흐르는 유행어입니다.34

이 사이트의 관련 글: iPhone에서 만드는 픽셀 아트 세계는 이 시리즈의 첫 가이드로, 마을을 그리는 타일 시스템, 팔레트, RealityKit 레시피를 다루며, 그 법적 FAQ는 이 글 7절부터 10절까지의 짧은 버전입니다. 픽셀 아트 건물은 마을의 집, 홀, 그리고 화분이 놓일 방을 지었고, 마을에 아직 없는 것 가운데 하나로 일방통행 턱을 꼽습니다. 픽셀 아트 사람들은 256걸음을 걸을 수집가에 관한 글이며, 항목 3을 연속 기록에서 바꾼 근거인 꾸미기 아이템과 아이들에 관한 규칙을 담고 있습니다.

출처


  1. pret, pokecrystal/engine/overworld/events.asm, 커밋 5beda23(877행부터의 CountStep: DoRepelStep, wStepCount, 주석 “Every 256 steps, increase the happiness of all your Pokemon”, “Every 256 steps, offset from the happiness incrementor by 128 steps”와 cp $80, “Every 4 steps, deal damage to all poisoned Pokemon”, 키우미집 경험치 걸음 처리, 1279행부터의 DoBikeStep과 cp HIGH(1024) 및 65,535 상한), https://github.com/pret/pokecrystal/blob/master/engine/overworld/events.asm. 상수와 행 번호는 이 글을 위한 필자의 증거 폴더에 있는 measure_systems.py가 출력(출력 파일 measure_systems.out.txt), 2026년 10월 4일 실행. 동작에 대한 설명은 코드에 대한 필자의 해석. ↩↩↩↩↩↩↩↩↩↩↩

  2. pret, pokecrystal/engine/events/happiness_egg.asm, 커밋 5beda23(107행의 StepHappiness, 108행의 주석 “Raise the party’s happiness by 1 point every other step cycle”, 110~115행의 ld hl, wHappinessStepCount, inc a, and 1, ld [hl], a, ret nz, cp EGG로 알 제외), https://github.com/pret/pokecrystal/blob/master/engine/events/happiness_egg.asm. 1바이트 wStepCount가 한 바퀴 돌 때마다 engine/overworld/events.asm의 CountStep이 호출. 행 번호는 measure_systems.py가 출력, 출력 파일 measure_systems.out.txt, 2026년 10월 4일 재실행. 친밀도가 512걸음마다 오른다는 것은 이 토글에 대한 필자의 해석. ↩↩↩↩↩↩↩↩

  3. pret, pokeemerald/src/berry.c, 커밋 731ad5b(BerryTreeTimeUpdate, 1089행의 * 71 삭제 검사, 1109행과 1127행의 minutesUntilNextStage *= 4, 1071행의 재성장 10회 초기화, 1252행에서 stageDuration * 60을 돌려주는 GetStageDurationByBerryType, CalcBerryYieldInternal, 1064~1072행의 BerryTreeGrow로 열매 맺음 단계가 끝날 때 berryYield = 0으로 하고 단계를 BERRY_STAGE_SPROUTED로 되돌리는 처리, 나무열매 43종의 stageDuration 값) 및 pokeemerald/src/clock.c(UpdatePerMinute), https://github.com/pret/pokeemerald/blob/master/src/berry.c. 단계 길이별 개수(1시간: 5, 3시간: 12, 4시간: 1, 6시간: 11, 12시간: 1, 18시간: 5, 24시간: 8)와 첫 열매까지의 시간은 measure_systems.py가 도출, 출력 파일 measure_systems.out.txt, 2026년 10월 4일. ↩↩↩↩↩↩↩↩↩↩↩

  4. pret, pokeemerald/src/dewford_trend.c, 커밋 731ad5b(파일 머리 주석: 유행도는 “Initialized as a random value between 30-127 inclusive”, 수용 규칙과 “boring” 규칙, SAVED_TRENDS_COUNT (5), 기록 교환 규칙. 96행에 clockRand = days * 5가 있는 UpdateDewfordTrendPerDay. 369~383행의 SeedTrendRng로 Random() % 98을 뽑아 30을 더함. 151행부터의 TrySetTrendyPhrase로, 158~169행의 첫 제출 분기는 세이브가 한 번도 유행을 바꾸지 않았고 한 번도 기록을 섞지 않았을 때 비교 없이 단어를 설정하고, 181행의 비교는 SORT_MODE_NORMAL의 CompareTrends를 사용함. 332~337행과 366행: 유행도, 그다음 최대 유행도, 완전한 동점이면 Random() & 1), https://github.com/pret/pokeemerald/blob/master/src/dewford_trend.c, 및 같은 커밋의 include/global.h(643행과 644행의 trendiness:7과 maxTrendiness:7. 따라서 점수는 127을 넘을 수 없음). 행 번호는 measure_systems.py가 출력. ↩↩↩↩↩↩↩↩↩↩↩

  5. Jason Schreier, “Pokémon Uranium Creators Pull Game After A Reported 1.5 Million Downloads”, Kotaku, 2016년 8월 13일(페이지의 날짜. 미국 동부 시간 20:34로, UTC로는 8월 14일), 개발자 성명 전문 수록, 2026년 10월 4일 열람, https://kotaku.com/pokemon-uranium-creators-pull-game-after-1-5-million-do-1785258831. ↩↩↩↩↩↩↩↩

  6. Heather Alexandra, “Pirates Leak Pokémon Prism After Nintendo Shuts It Down”, Kotaku, 2016년 12월 29일(12월 21일의 중지 요청, 예정된 크리스마스 공개, Pokémon Brown과 Rijon Adventures 내림), 2026년 10월 4일 열람, https://kotaku.com/pirates-leak-pokemon-prism-after-nintendo-shuts-it-down-1790598623. ↩↩↩↩↩↩↩

  7. Cohen Coberly, “Nintendo slaps fan game creation tool ‘Pokemon Essentials’ with DMCA takedown”, TechSpot, 2018년 8월 29일, Ars Technica 보도에 이어(Fandom의 이행, PokéCommunity 다운로드 삭제, 에셋에 관한 인용), 2026년 10월 4일 열람, https://www.techspot.com/news/76202-nintendo-slaps-fan-game-creation-tool-pokemon-essentials.html. ↩↩↩↩↩

  8. Catherine Lewis, GamesRadar+, “After almost 10 years, unofficial Pokemon website known for sharing fan-made games shuts down after reportedly receiving a DMCA takedown notice”, 2024년 3월 22일(Relic Castle의 성명, 호스팅이 아니라 링크, 발신자 미확인), 2026년 10월 4일 열람, https://www.gamesradar.com/after-almost-10-years-unofficial-pokemon-website-known-for-sharing-fan-made-games-shuts-down-after-reportedly-receiving-a-dmca-takedown-notice/. ↩↩↩↩↩↩

  9. Nintendo Co., Ltd. 및 The Pokémon Company, “Filing Lawsuit for Infringement of Patent Rights against Pocketpair, Inc.”, 공동 보도자료, 2024년 9월 19일(2024년 9월 18일 도쿄지방재판소에 제소, 금지명령과 손해배상), 2026년 10월 4일 열람, https://www.nintendo.co.jp/corporate/release/en/2024/240919.html. ↩↩

  10. Pocketpair, “Report on Patent Infringement Lawsuit”, 중요 공지, 2024년 11월 8일(2024년 1월 19일 Palworld 출시, 특허 제7545191호, 제7493117호, 제7528390호의 출원일과 등록일, 금지명령과 각 원고에 대한 500만 엔 및 지연손해금), 2026년 10월 4일 열람, https://www.pocketpair.jp/en/news/report-on-patent-infringement-lawsuit/. ↩↩↩↩↩↩

  11. Google Patents, JP7493117B2, “Game program, game system, game device, and game processing method”(권리자 Nintendo Co., Ltd.와 The Pokémon Company. 출원일 2024년 2월 26일. 우선권 표는 우선일을 2021년 12월 22일로 적고, 우선권 주장 출원 표는 같은 날 출원된 JP2021208275A를 JP7398425B2로 올리며, 공개 목록은 JP7398425B2를 2023년 12월 14일 공개로 적음), 청구항 1은 Google의 일본어 기계 번역, 2026년 10월 4일 저장, 이 글을 위한 필자의 증거 폴더에 있는 measure_patent_claims.py로 추출(출력 파일 measure_patent_claims.out.txt), https://patents.google.com/patent/JP7493117B2/en. 일본어 원문이 정본. ↩↩↩↩↩↩↩↩↩↩

  12. Google Patents, JP7545191B1, “Game program, game system, game device, and game processing method”(권리자 Nintendo Co., Ltd.와 The Pokémon Company. 출원일 2024년 7월 30일. 우선일 2021년 12월 22일, 모출원 JP2024031879A를 거침. 이는 JP2021208275A와 같은 패밀리의 분할이며, 2021년 12월 22일 출원, 2023년 12월 14일 JP7398425B2로 공개), 청구항 1은 Google의 기계 번역, 2026년 10월 4일 저장, measure_patent_claims.py로 추출, https://patents.google.com/patent/JP7545191B1/en. 일본어 원문이 정본. ↩↩↩↩↩↩↩↩

  13. Google Patents, JP7528390B2, “Game program, game system, information processing device, and information processing method”(권리자 Nintendo Co., Ltd.와 The Pokémon Company. 출원일 2024년 3월 5일. 우선일 2021년 12월 22일, 같은 날 출원된 JP2021208276A의 패밀리로 2023년 9월 22일 JP7349486B2로 공개), 청구항 1은 Google의 기계 번역, 2026년 10월 4일 저장, measure_patent_claims.py로 추출, https://patents.google.com/patent/JP7528390B2/en. 일본어 원문이 정본. ↩↩↩↩↩↩↩↩

  14. pret, pokeemerald/src/field_control_avatar.c, 커밋 731ad5b(543~604행의 TryStartStepCountScript. 565행의 ShouldDoBrailleRegicePuzzle과 IslandCave_EventScript_OpenRegiEntrance, 570~590행의 ShouldDo...Call 검사 다섯 개 포함. 친밀도는 620행의 (*ptr) %= 128, 독은 645행의 (*ptr) %= 4이며 비밀기지에서는 건너뜀), https://github.com/pret/pokeemerald/blob/master/src/field_control_avatar.c. 행 번호는 measure_systems.py가 출력. ↩↩↩↩↩↩↩↩

  15. pret, pokeemerald/src/pokemon.c, 커밋 731ad5b(5914행부터의 AdjustFriendship. species != SPECIES_EGG로 알 제외. FRIENDSHIP_EVENT_WALKING에 대해 5950~5952행의 주석 “50% chance every 128 steps”와 if (Random() & 1) return;. 2100행의 걷기 보정값 { 1, 1, 1}), https://github.com/pret/pokeemerald/blob/master/src/pokemon.c, 및 src/field_control_avatar.c(624~626행에서 지닌 포켓몬 슬롯마다 AdjustFriendship(mon, FRIENDSHIP_EVENT_WALKING)을 호출하는 UpdateFriendshipStepCounter). 행 번호는 measure_systems.py가 출력, 2026년 10월 4일 재실행. 평균 256걸음에 한 번이라는 값은 128걸음 박자의 50퍼센트 추첨에서 도출. ↩↩↩↩↩↩

  16. pret, pokered/scripts/SafariZoneGate.asm, 커밋 d2704a6(186행의 볼 30개, 188행과 190행의 HIGH(502)/LOW(502), 214행의 500원 문구, 이어서 192~194행의 ld a, PAD_UP, ld c, 3, call SafariZoneEntranceAutoWalk, 195행의 SetEvent EVENT_IN_SAFARI_ZONE. 걸음 수 자체는 engine/events/hidden_events/safari_game.asm에서 줄어들며 여기서는 에뮬레이션하지 않음), https://github.com/pret/pokered/blob/master/scripts/SafariZoneGate.asm, 및 731ad5b의 pokeemerald/src/safari_zone.c(61행의 sSafariZoneStepCounter = 500), https://github.com/pret/pokeemerald/blob/master/src/safari_zone.c. 행 번호는 measure_systems.py가 출력. ↩↩↩↩↩

  17. pret, d2704a6의 pokered/engine/items/item_effects.asm(ItemUseRepel의 ld b, 100, ItemUseSuperRepel의 ld b, 200, ItemUseMaxRepel의 ld b, 250), https://github.com/pret/pokered/blob/master/engine/items/item_effects.asm, 및 731ad5b의 pokeemerald/src/data/items.h(holdEffectParam 100, 200, 250), https://github.com/pret/pokeemerald/blob/master/src/data/items.h. 행 번호는 measure_systems.py가 출력. ↩↩↩↩↩

  18. pret, 5beda23의 pokecrystal/constants/misc_constants.asm(36~38행의 MORN_HOUR 4, DAY_HOUR 10, NITE_HOUR 18) 및 pokecrystal/engine/rtc/rtc.asm(TimesOfDay 테이블과 50행의 그 주석, 쓰이지 않는 BetaTimesOfDay), https://github.com/pret/pokecrystal/blob/master/constants/misc_constants.asm, https://github.com/pret/pokecrystal/blob/master/engine/rtc/rtc.asm. 행 번호는 measure_systems.py가 출력. ↩↩↩↩

  19. pret, 5beda23의 pokecrystal/maps/Route35NationalParkGate.asm(38~40행의 화요일, 목요일, 토요일 요일 검사) 및 pokecrystal/constants/script_constants.asm(293행과 294행의 BUG_CONTEST_BALLS 20, BUG_CONTEST_MINUTES 20), https://github.com/pret/pokecrystal/blob/master/maps/Route35NationalParkGate.asm. 행 번호는 measure_systems.py가 출력. ↩↩↩↩↩↩↩

  20. pret, 5beda23의 pokecrystal/constants/engine_flags.asm(wDailyFlags1과 wDailyFlags2, 각 8개 플래그), https://github.com/pret/pokecrystal/blob/master/constants/engine_flags.asm. measure_systems.py로 계수. ↩↩↩↩

  21. pret, 5beda23의 pokecrystal/engine/overworld/time.asm(241행의 .GetDaysUntilNextFriday) 및 pokecrystal/engine/events/lucky_number.asm(가진 모든 포켓몬의 ID와의 대조와 세 가지 상 등급), https://github.com/pret/pokecrystal/blob/master/engine/events/lucky_number.asm. 행 번호는 measure_systems.py가 출력. 등급은 루틴에 대한 필자의 해석. ↩↩↩↩↩↩↩↩

  22. pret, 731ad5b의 pokeemerald/src/clock.c(UpdatePerDay. 38행에서 저장된 날짜 수 VAR_DAYS를 읽고, 41행에서 오늘 것과 비교하고, 43행에서 daysSince를 계산하고, 44~54행에서 그것으로 열한 번 호출하고, 55행에서 오늘 날짜를 저장함. 그중 둘이 UpdateFrontierManiac와 UpdateFrontierGambler. 28행의 !InPokemonCenter() 가드가 하루 단위와 분 단위 갱신 앞에 있음), https://github.com/pret/pokeemerald/blob/master/src/clock.c. 행 번호는 measure_systems.py가 출력. ↩↩↩↩↩↩↩↩↩↩

  23. pret, 731ad5b의 pokeemerald/src/trainer_card.c(267~280행의 별 개수별 호연과 관동 카드 팔레트, 663~677행의 CountPlayerTrainerStars, 679~692행의 GetRubyTrainerStars로 『루비』『사파이어』 카드에 대해서는 첫 전당 등록 시간, caughtAllHoenn, 687행의 battleTowerStraightWins > 49, hasAllPaintings. 711~743행의 9,999와 999 상한), https://github.com/pret/pokeemerald/blob/master/src/trainer_card.c. 행 번호는 measure_systems.py가 출력. 『루비·사파이어』는 클론에 없으므로, 그 규칙은 그 카드들을 해석하는 이 코드에서 읽었음. ↩↩↩↩↩↩↩↩↩

  24. pret, pokered/constants/pokemon_data_constants.asm(MONS_PER_BOX 20, NUM_BOXES 12), pokecrystal/constants/pokemon_data_constants.asm(MONS_PER_BOX 20, MONS_PER_BOX_JP 30, NUM_BOXES 14), pokeemerald/include/pokemon_storage_system.h(TOTAL_BOXES_COUNT 14, IN_BOX_ROWS 5, IN_BOX_COLUMNS 6, 박스 이름과 배경), https://github.com/pret/pokeemerald/blob/master/include/pokemon_storage_system.h. 행 번호는 measure_systems.py가 출력. ↩↩↩

  25. pret, 731ad5b의 pokeemerald/include/constants/battle_frontier.h(MAX_STREAK 9999, FRONTIER_STAGES_PER_CHALLENGE 7) 및 pokeemerald/src/frontier_util.c(88~94행의 프런티어 브레인 연승 테이블로, 네 번째 열이 보정값. 1656~1693행의 GetFrontierBrainStatus로, 1662행의 winStreakNoModifier + sFrontierBrainStreakAppearances[facility][3]와 1674행의 비교. 2111행부터의 IncrementWinStreak). 각 연승이 무엇을 세는지는 같은 커밋의 시설별 스크립트에서 읽었음. 타워, 팰리스, 아레나, 팩토리의 배틀룸은 상대를 쓰러뜨릴 때마다 BattleFrontier_EventScript_IncrementWinStreak를 호출하고 배틀 수가 7에 이르면 도전을 끝냄(각 룸 scripts.inc의 case 7: 타워 51행, 팰리스 70행, 아레나 107행, 팩토리 104행). 피라미드는 BattlePyramid_WarpToNextFloor에서 그것을 호출하고(data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc, 88행), 7층 다음에 플레이어를 꼭대기로 보냄(93행). 돔은 우승한 토너먼트마다 한 번, BattleFrontier_BattleDomeLobby_EventScript_WonChallenge에서 그것을 호출하고(data/maps/BattleFrontier_BattleDomeLobby/scripts.inc, 44행과 45행), IncrementWinStreak(src/frontier_util.c, 2130~2134행)가 domeWinStreaks와 domeTotalChampionships를 함께 올림. 토너먼트는 DOME_ROUNDS_COUNT 4 라운드(include/constants/battle_dome.h, 8행). (src/battle_dome.c의 IncrementDomeStreaks도 같은 일을 하겠지만, 그 매크로 dome_incrementstreaks는 data/ 어디에서도 쓰이지 않음.) include/constants/battle_pike.h는 4행에서 NUM_PIKE_ROOMS 14를 정하고 완전 회복과 부분 회복, 상태 이상 방, 논플레이어 캐릭터가 있는 방 등 아홉 종류의 방을 나열하며, src/battle_pike.c는 1401행에서 튜브 연승을 NUM_PIKE_ROOMS로 나눔, https://github.com/pret/pokeemerald/blob/master/src/frontier_util.c. 행 번호는 measure_systems.py가 출력. ↩↩↩↩↩↩

  26. pret, 731ad5b의 pokeemerald/src/record_mixing.c(67~78행의 교환 기록 레이아웃으로, 오프셋 0x1434에서 끝나고 16바이트의 채움을 더해 모두 0x1444바이트), https://github.com/pret/pokeemerald/blob/master/src/record_mixing.c. 행 번호는 measure_systems.py가 출력. ↩↩↩↩↩↩

  27. pret, 731ad5b의 pokeemerald/include/constants/tv.h(POKENEWS_COUNTDOWN 4, NUM_NORMAL_TVSHOW_SLOTS 5, 5 더하기 20인 TV_SHOWS_COUNT. 방송 종류는 measure_systems.py로 일반 11, 기록 교환 전용 19, 대량 발생 1로 계수. 84행의 NUM_CUTIES_RIBBONS 4는 Spot the Cuties 호출부가 비교에 쓰는 상수), https://github.com/pret/pokeemerald/blob/master/include/constants/tv.h. ↩↩↩↩↩

  28. pret, 731ad5b의 pokeemerald/src/easy_chat.c(5429~5436행의 Trendy Sayings 주석), pokeemerald/include/constants/easy_chat.h(NUM_TRENDY_SAYINGS 33), pokeemerald/src/mauville_old_man.c(120행의 (trainerId % 10) / 2), pokeemerald/include/constants/mauville_old_man.h(다섯 종류), https://github.com/pret/pokeemerald/blob/master/src/easy_chat.c, https://github.com/pret/pokeemerald/blob/master/src/mauville_old_man.c. 행 번호는 measure_systems.py가 출력. ↩↩↩↩↩↩↩

  29. Automaton West, “Nintendo and The Pokémon Company have reportedly narrowed Palworld lawsuit to older versions of the game only, likely thanks to ‘preventive’ updates by Pocketpair”, 2026년 6월 12일(Automaton 일본인 직원들이 확인한 도쿄지방재판소 기록, 그리고 Games Fray. 2025년 11월의 수정, 여전히 청구 중인 금지명령, 2026년 10월 1일과 11월 9일의 기일, 발표된 7월 10일 출시), 2026년 10월 4일 열람, https://automaton-media.com/en/news/nintendo-and-the-pokemon-company-have-reportedly-narrowed-palworld-lawsuit-to-older-versions-of-the-game-only-likely-thanks-to-preventive-updates-by-pocketpair/. ↩↩↩↩↩↩

  30. Pocketpair, 중요 공지 목록, 2026년 10월 4일 열람(최신 공지는 2026년 1월 12일의 카드 게임 관련, 소송 관련 최신은 2025년 5월 8일), https://www.pocketpair.jp/en/news/category/important-en/. 보도가 없다는 것은 필자가 찾을 수 있었던 범위이지 증명이 아님. ↩↩↩

  31. 필자의 계수, 2026년 10월 4일: 초안 옆의 figures/steam_names.py로, 이 글을 위한 필자의 증거 폴더에 저장한 Steam app details 기록 일곱 개(steam_*.html. Coromon 1218210, Nexomon: Extinction 1196630, Cassette Beasts 1321440, Temtem 745920, Monster Sanctuary 814370, Moonstone Island 1658150, Palworld 1623730)에서 “Pokémon” 또는 “Pokemon”을 필드별로 셈. 짧은 설명과 긴 설명에서는 모두 0. Temtem의 reviews 필드에 1, Rock Paper Shotgun 인용. 출력 파일 figures/steam_names.out.txt. ↩↩↩↩↩↩↩

  32. Nintendo Life, “‘The Single Best Game Concept Ever’ - Pokémon-Inspired Devs Talk The Series That Started It All”, 2026년 3월 2일(Andrades, JVemon, Pouwels, Spink, Coxon), 2026년 10월 4일 열람, https://www.nintendolife.com/features/the-single-best-game-concept-ever-pokemon-inspired-devs-talk-the-series-that-started-it-all. ↩↩

  33. 필자의 조사 자료집, “Homage without borrowing”, 2026년 10월 4일, Kiradex 저장소의 docs/research/homage/01-homage.md: 이 글 14절의 바탕이 된 브리프, 건물 조사의 턱 거부(그 8.8절), 유료 무작위 아이템과 슬롯머신에 관한 수집 조사의 내용, 광장 서버의 접속 상태 전용 설계. 비공개 저장소. ↩↩↩↩↩↩↩↩↩↩↩

  34. Blake Crosley, “Pixel-Art Worlds on iPhone: What the 16-Bit Masters Knew”, blakecrosley.com, 2026년 10월 3일, 2026년 10월 4일 갱신(포지의 램프 14개에 58색. 법적 FAQ는 10월 4일 저작권을 명시하고 Palworld 특허를 더하도록 정정), https://blakecrosley.com/blog/pixel-art-world-on-iphone. ↩↩↩↩↩

  35. Blake Crosley, “Pixel-Art Structures: Houses, Halls and Interiors on iPhone”, blakecrosley.com, 2026년 10월 3일(방, 홀, 그리고 마을에 없는 것 가운데 하나로서의 “a one-way ledge”), https://blakecrosley.com/blog/pixel-art-structures-on-iphone. ↩↩↩↩

  36. Blake Crosley, “Pixel-Art People: Characters and a Creator on iPhone”, blakecrosley.com, 2026년 10월 3일(2026년 6월 이후 PEGI의 유료 무작위 아이템과 만료되는 로그인 연속 기록 등급 반영, 모든 꾸미기 아이템은 “purely visual, never random, never on a countdown”(순전히 시각적이고, 절대 무작위가 아니며, 절대 카운트다운이 아니다)이라는 규칙), https://blakecrosley.com/blog/pixel-art-characters-on-iphone. ↩↩↩↩↩↩↩↩

  37. 필자의 앱, Kiradex 저장소 커밋 b1b78b1(2026년 10월 4일), docs/WORLD.md 1절 “Can this exist without being sued”(Kiradex World의 규칙, 이름을 설명적으로 쓰는 한 줄, 식별 목적으로만 쓰는 카드 이미지, 그리고 이 글이 바로잡는 이전의 Uranium 문구), 2절(가능한 한 적게 수집하도록 만든 설계, 146~149행), 3절의 데이터 단락(Game Center 플레이어 id를 키로 하는 서버, 다른 데이터와 결합될 때 COPPA가 개인정보로 보는 영구 식별자, 개인정보 처리방침, 서드파티 분석과 광고 없음, 요청 시 삭제, 199~206행). 비공개 저장소. ↩↩↩↩↩↩↩↩

  38. 필자의 측정, 2026년 10월 4일, 주석이 인용하는 모든 행을 출력하도록 2026년 10월 5일 확장: 이 글을 위한 필자의 증거 폴더에 있는 measure_systems.py를 pret의 pokered(d2704a6), pokecrystal(5beda23), pokeemerald(731ad5b), pokefirered(037335f)의 얕은 클론에 대해 실행. 각각 2026년 9월 22일, 9월 29일, 10월 1일, 9월 26일자 master 브랜치 커밋(각 클론에서 git show -s). 각 상수를 파일과 행 번호와 함께 출력하고 개수를 도출, 출력 파일 measure_systems.out.txt. 각 저장소의 README는 빌드하는 각 ROM의 SHA-1을 적고 있음. 예: https://github.com/pret/pokeemerald/blob/master/README.md. ↩↩

  39. 필자의 측정, 2026년 10월 4일: 이 글을 위한 필자의 증거 폴더에 있는 measure_map_features.py로, 731ad5b의 pret pokeemerald에 있는 모든 data/maps/*/map.json에 대해 각 고유 레이아웃의 map.bin을 프라이머리와 세컨더리 metatile_attributes.bin과 대조하고(턱은 MB_JUMP_*, 마하 전용은 MB_MUDDY_SLOPE와 MB_CRACKED_FLOOR, 더트 전용은 레일과 MB_BUMPY_SLOPE, MB_TALL_GRASS), 전체 맵의 OBJ_EVENT_GFX_CUTTABLE_TREE 오브젝트를 계수. 이 글을 위해 다시 실행했고, 출력은 초안 옆에 figures/measure_map_features.out.txt로 저장. 세는 것은 셀이지 지형 요소가 아니며, 공유 레이아웃은 한 번만 셈. ↩↩↩↩↩↩↩↩↩

  40. pret, 커밋 5beda23의 pokecrystal/engine/overworld/events.asm(892행과 893행의 주석 “decrease the hatch counter of all your eggs until you reach the first”와 “one that is ready to hatch”, 898행과 899행의 farcall DoEggStep과 jr nz, .hatch. .hatch는 928행에서 PLAYEREVENT_HATCH를 불러오고 이것이 HatchEggScript를 실행함. 그 레이블은 999행이며 1000행에 callasm OverworldHatchEgg가 있음) 및 같은 커밋의 pokecrystal/engine/pokemon/breeding.asm(174행부터의 DoEggStep: wPartySpecies를 순서대로 훑고 EGG가 아닌 것은 건너뛰며, 알이면 185행에서 dec [hl]을 실행하고 카운터가 0이 되면 189행에서 0이 아닌 결과로 돌아감), https://github.com/pret/pokecrystal/blob/master/engine/pokemon/breeding.asm. 뒤의 알이 다음 박자를 기다린다는 것은 이 조기 반환에 대한 필자의 해석. ↩

  41. pret, 731ad5b의 pokeemerald/src/daycare.c(890행의 (daycare->mons[1].steps & 0xFF) == 0xFF, 898행의 ++daycare->stepCounter == 255, GetEggCyclesToSubtract, 903행부터의 지닌 포켓몬 루프로, 907행에서 MON_DATA_SANITY_IS_BAD_EGG를 건너뛰고, 911행에서 eggCycles != 0일 때만 빼며, 그렇지 않으면 922행에서 gSpecialVar_0x8004 = i를 설정하고 923행에서 돌아가므로 루프는 그 알에서 끝남. 이어서 ShouldEggHatch가 src/field_control_avatar.c의 554~557행에서 EventScript_EggHatch를 시작함), https://github.com/pret/pokeemerald/blob/master/src/daycare.c. 행 번호는 measure_systems.py가 출력. ↩↩↩

  42. pret, 731ad5b의 pokeemerald/src/battle_setup.c(1792행의 STEP_COUNTER_MAX 255, 1796행의 HasAtLeastFiveBadges()), https://github.com/pret/pokeemerald/blob/master/src/battle_setup.c, 및 037335f의 pokefirered/src/vs_seeker.c(855행의 vsSeekerChargeSteps == 100), https://github.com/pret/pokefirered/blob/master/src/vs_seeker.c. 행 번호는 measure_systems.py가 출력. ↩↩

  43. 필자의 그림, 2026년 10월 4일 작성(청구항 행렬의 법적 주석은 2026년 10월 5일 다시 그림). 초안 옆의 figures/figures.py로 measure_systems.out.txt, measure_map_features.out.txt, measure_patent_claims.out.txt, 저장한 미국 특허 페이지, 8절과 9절에서 인용한 날짜 있는 기록 페이지, Kiradex/World/Daylight.swift를 바탕으로 그림. 스크립트는 그리기 전에 원래 값을 다시 읽어 단언함. 게임 아트도 로고도 쓰지 않음. ↩↩↩↩↩↩

  44. U.S. Copyright Office, Circular 33: Works Not Protected by Copyright, https://www.copyright.gov/circs/circ33.pdf, 이 시리즈 첫 글에서 인용한 것(그 주석 19, 2026년 10월 2일 열람). ↩↩↩↩

  45. 필자의 앱, Kiradex 저장소 커밋 b1b78b1: Kiradex/World/Daylight.swift(Phase.init(hour:): case 6..<9: self = .morning, 9..<17은 낮, 17..<20은 저녁, 나머지는 밤. 100~105행의, -plazaHour 실행 인자를 읽는 Daylight.forcedHour), Kiradex/World/PlazaStage.swift(58행의, 설정되어 있으면 Daylight.forcedHour를 쓰는 daylight(at:)), KiradexUITests/KiradexUITests.swift(-plazaHour 21로 실행한 걷기). 비공개 저장소. ↩↩↩↩↩

  46. pret, 5beda23의 pokecrystal/constants/phone_constants.asm(CONTACT_LIST_SIZE 10) 및 pokecrystal/constants/engine_flags.asm(wDailyRematchFlags 24, wDailyPhoneItemFlags 10, wDailyPhoneTimeOfDayFlags 24. 전화 창은 요일별로 월요일 3, 화요일 3, 수요일 4, 목요일 4, 금요일 4, 토요일 3, 일요일 3, 시간대별로 아침 9, 오후 7, 밤 8이며 measure_systems.py로 계수), https://github.com/pret/pokecrystal/blob/master/constants/phone_constants.asm. ↩↩↩↩↩

  47. pret, 731ad5b의 pokeemerald/include/constants/flags.h(이름 붙은 FLAG_DAILY_* 플래그 12개, 그중 9개는 나무열매 선물), https://github.com/pret/pokeemerald/blob/master/include/constants/flags.h. measure_systems.py로 나열. ↩

  48. pret, 731ad5b의 pokeemerald/include/constants/berry.h(20~26행의 단계 상수, 130행의 BERRY_TREES_COUNT 128), https://github.com/pret/pokeemerald/blob/master/include/constants/berry.h. 행 번호는 measure_systems.py가 출력. ↩

  49. 필자의 열거, 2026년 10월 5일: 이 글을 위한 필자의 증거 폴더에 있는 enumerate_berry_yield.py. 731ad5b의 pokeemerald src/berry.c에서 CalcBerryYieldInternal을 출력하고(1210~1234행: 물을 주지 않았으면 return min, 그렇지 않으면 (max - min) * (water - 1)부터 (max - min) * water까지를 NUM_WATER_STAGES(4)로 나누어 반올림한 범위에서 randMin + Random() % (randMax - randMin + 1)), 나무열매 43종의 minYield와 maxYield를 읽어(1~2가 14종, 2~3이 14종, 2~4가 5종, 2~6이 5종, 3~6이 5종) 물 준 단계 수마다 나올 수 있는 모든 수확량을 나열함. 출력 파일 enumerate_berry_yield.out.txt. ↩

  50. Serebii.net, “Pokéathlon”(『하트골드·소울실버』. 세 종목으로 된 라운드, 1등 보너스, 매일 바뀌는 상점, “Daily & Weekly Events” 제목), 2026년 10월 4일 열람, https://www.serebii.net/heartgoldsoulsilver/pokeathlon.shtml. 2차 자료이며 측정하지 않았음. ↩

  51. pret, 731ad5b의 pokeemerald/src/tv.c(1115행에서 TryPutPokemonTodayOnAir가 호출하는 TryStartRandomMassOutbreak, 1652행의 게임 클리어 플래그, 1654~1657행의 기존 대량 발생 루프. 이 루프는 i < LAST_TVSHOW_IDX로 돌고 LAST_TVSHOW_IDX는 49행에서 TV_SHOWS_COUNT - 1로 정의되므로 25개 슬롯 중 0~23번을 검사함. 1563행부터의 StartMassOutbreak는 1578행에서 outbreakDaysLeft = 2를 설정하며, TV에서 재생되는 대량 발생 보도인 DoTVShowPokemonNewsMassOutbreak가 4906행에서 호출함. 1716~1737행의 UpdateTimeBeforeMassOutbreak는 매일 daysBeforeOutbreak를 카운트다운하고, GetRandomActiveShowIdx는 그것이 0이 될 때만 대량 발생 보도를 TV에 내보냄(800행). 1659행의 rbernoulli(1, 200), 1661행과 1662행의 빈 슬롯 검사로, 3118행부터의 FindFirstEmptyNormalTVShowSlot은 처음 NUM_NORMAL_TVSHOW_SLOTS(5)개 슬롯에서만 방송되지 않는 슬롯을 찾음. 1680행의 probability = 50, 1682행의 daysBeforeOutbreak = 1), https://github.com/pret/pokeemerald/blob/master/src/tv.c, 및 src/battle_main.c(5098행부터의 HandleEndTurn_FinishBattle. 5102~5108행에서 통신, 녹화된 통신, 첫 배틀, 사파리, e-Reader, 민진의 튜토리얼, 프런티어 배틀을 건너뛰고 5126행에서 TryPutPokemonTodayOnAir를 호출함). 행 번호는 measure_systems.py가 출력. ↩↩↩

  52. pret, 037335f의 pokefirered/src/trainer_card.c(통신용 카드의 별: 850행의 HasAllKantoMons(), 886행의 berriesPicked >= 200 && jumpsInRow >= 200), https://github.com/pret/pokefirered/blob/master/src/trainer_card.c. 행 번호는 measure_systems.py가 출력. ↩

  53. pret, 731ad5b의 pokeemerald/include/constants/pokemon.h(100행의 CHAMPION_RIBBON부터 시작하는 리본 ID), https://github.com/pret/pokeemerald/blob/master/include/constants/pokemon.h. ↩

  54. pret, 731ad5b의 pokeemerald/src/field_specials.c(호출부 중 하나인 1386행의 if (GetRibbonCount(leadMon) > NUM_CUTIES_RIBBONS). contest_util.c, battle_tower.c, post_battle_event_funcs.c의 콘테스트, 배틀타워, 배틀 후 호출부도 같은 > 검사를 씀) 및 src/tv.c(2253행부터의 TryPutSpotTheCutiesOnAir: 기록 교환용 빈 슬롯과 아직 생성되지 않은 Spot the Cuties 방송을 필요로 하고(2258행), 2262행에서 “NOTE: Show is not active until passed via Record Mix.”라는 주석과 함께 show->cuties.active = FALSE를 설정함), https://github.com/pret/pokeemerald/blob/master/src/tv.c. ↩

  55. pret, 731ad5b의 pokeemerald/include/constants/coins.h(MAX_COINS 9999), https://github.com/pret/pokeemerald/blob/master/include/constants/coins.h. ↩

  56. pret, 731ad5b의 pokeemerald/src/lottery_corner.c(16~19행의 상품 네 가지, 64행의 “do not calculate ticket values for eggs” 주석, 70행과 94행의 두 자리 이상 규칙), https://github.com/pret/pokeemerald/blob/master/src/lottery_corner.c, 및 include/constants/flags.h의 FLAG_DAILY_PICKED_LOTO_TICKET과 src/clock.c의 SetRandomLotteryNumber. 행 번호는 measure_systems.py가 출력. ↩↩

  57. pret, 731ad5b의 pokeemerald/src/bike.c(sMachBikeSpeeds, 더트자전거의 트릭 처리), https://github.com/pret/pokeemerald/blob/master/src/bike.c. ↩↩

  58. pret, 731ad5b의 pokeemerald/include/constants/global.h(SECRET_BASES_COUNT 20, DECOR_MAX_SECRET_BASE 16, DECOR_MAX_PLAYERS_HOUSE 12), https://github.com/pret/pokeemerald/blob/master/include/constants/global.h. ↩↩

  59. pret, 5beda23의 pokecrystal/engine/overworld/time.asm(45행의 ReceiveCallDelays: db 20, 10, 5, 3. 인덱스는 wTimeCyclesSinceLastCall로, CheckReceiveCallTimer가 타이머가 끝날 때마다 최대 3까지 1씩 올리고(47~59행), InitCallReceiveDelay(12~14행)가 0으로 되돌림. Script_ReceivePhoneCall이 매 통화 뒤에 그것을 호출함, engine/phone/phone.asm 431행) 및 pokecrystal/engine/phone/phone.asm(119행의 “50% chance for a call” 주석, 시간대와 통화권 검사), https://github.com/pret/pokecrystal/blob/master/engine/phone/phone.asm. 행 번호는 measure_systems.py가 출력. ↩↩↩

  60. The Pokémon Company, ポケットモンスターオフィシャルサイト, ご利用について(사이트 이용 규정), 2차 창작물 단락, 요청하지 않은 아이디어를 받지 않는다는 단락, 상표 문구, 2026년 10월 4일 열람, https://www.pokemon.co.jp/rules/. 본문의 번역은 필자의 것. ↩↩↩↩↩↩

  61. Google Patents, US12403397B2, “Storage medium, information processing system, information processing apparatus, and game processing method”(권리자 Nintendo Co., Ltd.와 The Pokémon Company. 2023년 3월 1일 출원, 2025년 9월 2일 등록), 청구항 1, 2026년 10월 4일 저장, https://patents.google.com/patent/US12403397B2/en. ↩↩↩↩↩↩↩

  62. Warner-Jenkinson Co. v. Hilton Davis Chemical Co., 520 U.S. 17 (1997), 코넬대 로스쿨 Legal Information Institute가 게재한 판례집 편찬관의 요지(syllabus), 2026년 10월 5일 저장(법원은 “adheres to the doctrine of equivalents”(균등론을 고수한다)고 하며, 그에 따르면 문언상 침해하지 않는 제품이나 방법도 그 요소와 청구된 요소 사이에 “equivalence”가 있으면 “may nonetheless be found to infringe”(그럼에도 침해로 인정될 수 있다). 균등론은 “to each of the individual elements of a claim, rather than to the accused product or process as a whole”(피고 제품이나 방법 전체가 아니라 청구항의 개별 요소 각각에) 적용된다. 요지는 요약이며 판결의 일부가 아님), https://www.law.cornell.edu/supct/html/95-728.ZS.html. ↩

  63. 일본 최고재판소 제3소법정, 1998년 2월 24일 판결, 1994(O)1083호, 볼 스플라인 축받이 사건. 지식재산고등재판소가 균등론에 관한 중요 판결 목록에 공개한 영어 번역본, 2026년 10월 5일 저장(제품이 청구항과 한 부분에서 다르더라도 다섯 요건을 충족하면 “regarded as identical with the construction as indicated in the scope of the patent claim”(특허청구범위에 기재된 구성과 동일한 것으로 본다). 첫째 요건은 “this part is not the essential part of the patented invention”(그 부분이 특허발명의 본질적 부분이 아닐 것), 마지막 요건은 “such as the fact that the products had been intentionally excluded from the scope of the patent claim in the patent application process”(출원 과정에서 제품이 특허청구범위에서 의식적으로 제외되었다는 사실 같은) 특단의 사정이 없을 것), https://www.courts.go.jp/ip/eng/assets/ip/eng/chizai_en/chizai_en-pdf-1640.pdf, 링크 출처 https://www.courts.go.jp/ip/eng/hanrei/Important_IP_Judgment_by_Category/Patent/Doctrine_of_Equivalents/index.html. 일본어 판결이 정본. ↩

  64. Ana Diaz, “Pokémon Fangames Evolve Beyond Their Origins”, Aftermath, 2026년 10월 1일(2026년 9월 30일 Fansplaining에 처음 게재), 2026년 10월 4일 열람, https://aftermath.site/pokemon-fangames-fansplaining/. 앱의 세계 설계 문서가 Uranium 문장의 출처로 삼았던 글. ↩

  65. Nintendo Life, “Fan-Made Pokémon Prism Game Leaks Online After Nintendo Shutdown Notice”, 2016년 12월 30일(12월 21일의 서한, 예정된 12월 25일 공개), 2026년 10월 4일 열람, https://www.nintendolife.com/news/2016/12/fan-made_pokemon_prism_game_leaks_online_after_nintendo_shutdown_notice. ↩↩

  66. Internet Archive, “Nintendo’s Cease and Desist to Pokémon Prism”. Prism 기여자가 가림 처리된 스캔본을 보내 주었다고 말하는 제3자가 올림. 올린 사람의 설명은 당파적이며, 이 글을 위해 스캔본은 읽지 않았음, https://archive.org/details/pokemon-prism-cease-desist. ↩

  67. Luke Plunkett, “Pokémon’s Former Chief Lawyer On Shutting Down Fan Games & Honeymoon Business Deals”, Aftermath, 2024년 3월 13일(Don McGowan과의 “What I Do” 인터뷰), 2026년 10월 4일 열람, https://aftermath.site/pokemon-lawyer-cease-desist-fan-project-pikachu-movie/. ↩↩↩↩

  68. Chris Scullion, “Former Pokémon lawyer says fundraising and press coverage lead to fan project takedowns”, Video Games Chronicle, 2024년 3월 14일, 2026년 10월 4일 열람, https://www.videogameschronicle.com/news/former-pokemon-lawyer-says-fundraising-and-press-coverage-lead-to-fan-project-takedowns/. ↩

  69. The National Law Review, “Guangdong Higher People’s Court: 107 Million RMB Settlement in Pokémon Copyright and Unfair Competition Case”, 2025년 2월 23일(2월 21일 발표, 2021년 12월 제소, 5억 위안 청구, 1심의 판단 근거), 2026년 10월 4일 열람, https://natlawreview.com/article/guangdong-higher-peoples-court-107-million-rmb-settlement-pokemon-copyright-and. ↩↩↩

  70. The Pokémon Company, 他社ゲームに関するお問い合わせについて, 기업 뉴스, 2024년 1월 25일(일본어 본문과 그 아래의 영어 성명), 2026년 10월 4일 열람, https://corporate.pokemon.co.jp/media/news/detail/335.html. ↩↩

  71. Nintendo Life, “The Pokémon Company Releases Official Statement About Palworld”, 2024년 1월 25일, 2026년 10월 4일 열람, https://www.nintendolife.com/news/2024/01/the-pokemon-company-releases-official-statement-about-palworld. ↩

  72. GamesRadar+, “Palworld developer reveals the exact patents it’s alleged to have infringed upon in the Nintendo lawsuit, and they all have application dates after the survival game’s release”, 2024년 11월 8일(세 특허의 대응 관계. Automaton, 구리하라 기요시, 변리사 법인 Siarasia 경유. 2021년 12월의 모특허), 2026년 10월 4일 열람, https://www.gamesradar.com/games/survival/palworld-developer-reveals-the-exact-patents-its-alleged-to-have-infringed-upon-in-the-nintendo-lawsuit-and-they-all-have-application-dates-after-the-survival-games-release/. ↩↩↩

  73. 필자의 추출, 2026년 10월 4일, 2026년 10월 5일 재작성: 이 글을 위한 필자의 증거 폴더에 있는 measure_patent_claims.py가 저장한 Google Patents 페이지에서 제목, 권리자, 날짜를 읽고, 페이지 자체의 청구항 컨테이너(일본 페이지는 <claim num="1">, 미국 페이지는 CLM-00001)에서 청구항 1을 통째로 꺼냄. 일본 특허 세 건은 일본어 원문과 Google의 영어 기계 번역을 따로, 미국 특허는 영어 원문을 자르지 않고 출력함. 출력 파일 measure_patent_claims.out.txt. 첫 버전은 청구항 절을 평평하게 펴서 3,000자에서 잘랐고, 그 JP 7545191 “청구항 1”은 청구항 2까지 이어져 있었음. 첫 버전은 새 버전 옆에 보관함. ↩↩

  74. Pocketpair, “Regarding the lawsuit, changes to Palworld and the future”, 중요 공지, 2025년 5월 8일(2024년 11월 30일의 패치 v0.3.11, 패치 v0.5.5, 변경은 “a result of the ongoing litigation”(진행 중인 소송의 결과)), 2026년 10월 4일 열람, https://www.pocketpair.jp/en/news/regarding-the-lawsuit-changes-to-palworld-and-the-future/. ↩↩

  75. Steam, Palworld(app 1623730)의 app details, 출시일 “9 Jul, 2026”, 2026년 10월 4일 스토어 API로 가져옴, https://store.steampowered.com/app/1623730/Palworld/. ↩

  76. Automaton West, “Nintendo patent tied to Palworld lawsuit stays rejected as JPO shuts down objections in unusually sharp-tongued notice”, 2026년 7월 22일(분할출원 No. 2026-019762, 2013년 Pokémon Generations 영상, 진보성에 관한 심사관의 논거, 3개월 기간), 2026년 10월 4일 열람, https://automaton-media.com/en/news/nintendo-patent-central-to-palworld-lawsuit-stays-rejected-as-jpo-shuts-down-objections-in-unusually-sharp-tongued-notice/. ↩

  77. Engadget, “Nintendo’s patent on summoning fighting NPCs is being reexamined”, 2025년 11월 4일(청장의 명령, 선행 기술로 든 2002년 Konami 출원과 Nintendo 간행물), 2026년 10월 4일 열람, https://www.engadget.com/gaming/nintendo/nintendos-patent-on-summoning-fighting-npcs-is-being-reexamined-180949135.html. ↩

  78. Claire Jackson, “US Patent Office Reexamining Controversial Pokemon Patent”, Kotaku, 2025년 11월 4일, 2026년 10월 4일 열람, https://kotaku.com/pokemon-patent-summoning-nintendo-palworld-monsters-2000641133. ↩

  79. Andrew H. Velzen, “Pokémon Reexam Receives First Action from USPTO”, MBHB, 2026년 4월 3일(재심사 No. 90/020,162, 2026년 3월 25일 발송되어 35 U.S.C. § 103에 따라 모든 청구항을 거절한 첫 Office Action, 2026년 6월 25일과 9월 25일의 응답 기한, 청구항 1 인용), 2026년 10월 4일 열람, https://www.mbhb.com/intelligence/snippets/pokemon-reexam-receives-first-action-from-uspto/. ↩↩↩

  80. The Pokémon Company International, 법적 정보 페이지, https://www.pokemon.com/us/legal/information: 2026년 10월 4일 필자의 수집 도구에 봇 확인 화면을 돌려주었고, Wayback Machine 사본도 같은 차단을 돌려줌. 미검증. ↩↩

  81. Nintendo, “Nintendo Game Content Guidelines for Online Video & Image Sharing Platforms” 및 그 FAQ(판매에 관한 A5, 그 밖의 콘텐츠에 관한 Q6과 A6), 2026년 10월 4일 열람, https://www.nintendo.co.jp/networkservice_guideline/en/index.html. ↩↩↩

  82. Nintendo Life, “Cassette Beasts Dev On Doing What Pokémon Doesn’t In A Zelda-Inspired Overworld”, 2023년 4월 26일, 2026년 10월 4일 열람, https://www.nintendolife.com/features/cassette-beasts-dev-on-doing-what-pokemon-doesnt-in-a-zelda-inspired-overworld. ↩

  83. Gematsu, “Crema Games announces Pokemon-inspired multiplayer creature collection game Temtem”, 2018년 4월 30일, 2026년 10월 4일 열람, https://www.gematsu.com/2018/04/crema-games-announces-pokemon-inspired-multiplayer-creature-collection-game-temtem. ↩

  84. Apple Developer Documentation, “CMPedometer”(iOS 8.0, “An object for fetching the system-generated live walking data”, 사용 목적 설명 요건), 2026년 10월 4일 JSON으로 가져옴, https://developer.apple.com/documentation/coremotion/cmpedometer. ↩↩

  85. Apple Developer Documentation, “stepCount”(HKQuantityTypeIdentifier, iOS 8.0), 2026년 10월 4일 JSON으로 가져옴, https://developer.apple.com/documentation/healthkit/hkquantitytypeidentifier/stepcount. ↩

  86. 필자의 앱, Kiradex 저장소 커밋 b1b78b1: server/app/rooms.py(WALKABLE, is_walkable, may_move), server/app/main.py(156행부터의 _player로, 160행에서 각 연결의 플레이어 id를 핸들과 보여 주는 카드와 함께 UUID로 읽음. 걸을 수 없는 타일로의 이동을 거부하는 _tile. 217행부터의 이동 핸들러로, 222행에서 플레이어의 타일을 설정함), server/app/lines.py(“The preset lines: everything anyone can say in the plaza. Nothing is typed”(미리 준비된 대사: 광장에서 누구든 말할 수 있는 모든 것. 아무것도 입력하지 않는다)), Kiradex/World/PlazaStage.swift(333행의 @AppStorage("plaza.id") 속성으로, 그 id는 한 번 만들어지고 입력되거나 표시되지 않는다는 문서 주석 아래에 있음. 그리고 비어 있을 때 576행과 577행에서 그것을 UUID().uuidString으로 설정하는 join()), Kiradex/World/PlazaClient.swift(135행에서 그 id를 보내는 hello 메시지). 비공개 저장소. ↩↩↩↩↩↩↩

  87. Apple Developer Documentation, “startOfDay(for:)”(Calendar, iOS 8.0), 2026년 10월 4일 JSON으로 가져옴, https://developer.apple.com/documentation/foundation/calendar/startofday(for:). ↩↩

  88. Apple Developer Documentation, “isDate(:inSameDayAs:)”(Calendar, iOS 8.0), 2026년 10월 4일 JSON으로 가져옴, https://developer.apple.com/documentation/foundation/calendar/isdate(:insamedayas:). ↩↩

  89. Apple Developer Documentation, “NSCalendarDayChanged”(NSNotification.Name, iOS 8.0), 2026년 10월 4일 JSON으로 가져옴, https://developer.apple.com/documentation/foundation/nsnotification/name-swift.struct/nscalendardaychanged. ↩↩

  90. Apple Developer Documentation, “significantTimeChangeNotification”(UIApplication, 설명의 예시), 2026년 10월 4일 JSON으로 가져옴, https://developer.apple.com/documentation/uikit/uiapplication/significanttimechangenotification. ↩

  91. 필자의 확인, 2026년 10월 5일: 초안 옆의 figures/saying_drift.py로, 브리프가 제안한 흐름 규칙을 인수 테스트의 숫자로 실행하고, 열흘 치를 한꺼번에 적용한 결과가 매일 열 번 읽은 결과와 같음을 단언함. 출력 파일 figures/saying_drift.out.txt(같은 날짜에 세 번 읽은 뒤와 재시작 뒤 50, 열흘 뒤 20으로 식상한 상태, 점수 10의 식상한 말은 사흘 뒤 5로 상승 중). ↩

관련 게시물

Pixel-Art Structures: Houses, Halls and Interiors on iPhone

How Pokémon, the SNES RPGs and Stardew build houses, interiors and floors, measured from source, and how Kiradex's town …

80 분 소요

Pixel-Art Rooms: Furniture Grids, Caps and Scoring

How Emerald, Animal Crossing, Habbo, Stardew and FFXIV cap, grid and score a decorated room, measured from source, and a…

100 분 소요

iPhone Duo에 맞춰 앱 준비하기: 실제 앱으로 따라가는 예제

iPhone Duo용 앱을 준비하고 제출하는 방법. 레이아웃을 켜는 SDK 스탬프, 모든 포즈로 돌려 본 실제 앱, 스크린샷, App Store 규칙까지 정리했습니다.

53 분 소요