بوكيمون خاص بي وحدي في العالم

نظرة عامة

في منتصف اللعب، وداخل نافذة في اللعبة نفسها، يكتب اللاعب بضع كلمات. وبينما اللعبة لا تزال تعمل، يحوّلها الذكاء الاصطناعي إلى نوع جديد تمامًا من البوكيمون — رسم واسم ونمط وإحصاءات أساسية وحركات — ويسجّله نوعًا كامل الصفة. تلقاه في العشب الطويل، وتمسكه، وتمنحه لقبًا، وتربّيه كأي بوكيمون آخر.

لا شيء منه مكتوب سلفًا. النوع الذي ينتهي به الأمر في ملف الحفظ لم يوجد من قبل، ولا يوجد في أي مكان آخر.

من بين ما قدّمته الألعاب دائمًا أن تصنع شيئًا يخصّك أنت. لكن ذلك عمليًا كان يعني الاختيار من مجموعة ثابتة. هذا المشروع موجود ليختبر هل يجعل الذكاء الاصطناعي التوليدي كلمة يخصّك صحيحة حرفيًا — والأهم، هل الشيء الذي يخصّك حرفيًا هو شيء يتعلّق به اللاعب فعلًا.

مسار التجربة

يبدأ كل شيء بالحديث إلى امرأة مسنّة في غابة بيتالبرغ. تصف المخلوق الذي في ذهنك؛ فتتحول تلك الكلمات إلى نوع بينما تواصل اللعب؛ وبعد دقائق يكون في انتظارك في العشب الطويل — تلقاه وتمسكه وتستعمله بعدها تمامًا كأي شيء آخر في اللعبة. كل ذلك يُصنع في حينه: الاسم والنمط والإحصاءات الأساسية وطقم الحركات وصورتا القتال الأمامية والخلفية وأيقونة الفريق.

زوجان مسنّان يقفان في غابة بيتالبرغ. في صندوق الحوار: قل لي… أيّ مخلوق تتخيّله؟
الحديث إلى المرأة المسنّة هو ما يبدأ الأمر.
شاشة إدخال نظام الحوار المبسّط بعنوان «تخيّل المخلوق:» وقد أُدخلت فيها الكلمات BEAUTIFUL و ATTACK و FIRE.
تمنحها ست كلمات عبر نظام الحوار المبسّط الموجود أصلًا في إصدار الزمرد.
اللاعب يقف في الغابة إلى جوار العشب الطويل. في صندوق الحوار: العشب الطويل يتحرك… هناك شيء بداخله!
يستغرق التوليد بضع دقائق على الحاسوب. صيحة تُعلن أنه صار جاهزًا.
شاشة قتال. سحلية حمراء تعلو رأسها شعلة تواجه اللاعب. النص: ظهر FLAMEREL بري!
‏FLAMEREL، سحلية من نمط النار، تظهر في العشب المتحرك.
تُرمى كرة بوكي على FLAMEREL أثناء القتال.
يمكن الإمساك به بكرة بوكي، كأي نوع آخر.
شاشة تطلب لقبًا لـ FLAMEREL، وقد أُدخل GGG.
يمكن منحه لقبًا، كأي نوع آخر.
شاشة الفريق تعرض النوع المولَّد إلى جانب ثلاثة بوكيمون عاديين، بأيقونته الخاصة.
يجلس في الفريق بأيقونته الخاصة، كأي نوع آخر.
شاشة معلومات FLAMEREL: نمط النار، قدرة Blaze، طبع شقي، لوحظ عند المستوى 7 في غابة بيتالبرغ.
تعمل شاشة ملخّصه، كأي نوع آخر.

تسجيل لجولة كاملة، من أولها إلى آخرها، هنا: My Own Pokémon Generation — demo02.

لماذا هذا، لا مولّد مخلوقات

المسألة المثيرة للاهتمام ليست هل يستطيع الذكاء الاصطناعي اختراع بوكيمون. المسألة هي هل يستطيع اختراع واحد تقدر اللعبة على استيعابه دون أن تتفكك. فلو تُرك وشأنه، لأنتج المولّد إما شيئًا غير صالح للاستعمال — وحشًا مجموع إحصاءاته 900 يفرّغ اللعبة من معناها — وإما شيئًا مزعجًا: صورة مشوّهة تكفّ عن أن تُقرأ كمخلوق أصلًا.

إذن فالعمل التصميمي هنا ليس المخلوق. إنه الفضاء الذي يُولَّد المخلوق داخله: نطاقات الإحصاءات، وقواعد مشروعية الحركات، والظلال الخارجية التي تنجو في صورة 64×64، والمفردات التي يُسمح للاعب أصلًا بالوصف بها. النموذج يستكشف ذلك الفضاء، ولا يُترك له أن يحدّده.

هذا المشروع هو الموضع الذي تكفّ فيه فلسفتي في التصميم عن كونها دعوى وتوضَع فيه على المحك: تحديد الأهداف والقيم والقيود والحدود التي تصوغ فضاءً تصميميًا، وترك التوليد يجري داخله، ثم تبيّن هل يصمد الناتج.

الإطار هو موضوع البحث

النموذج اللغوي لا يكتب بحرية أبدًا. إنه يملأ خانات في مخطط ثابت، وكل مُخرَج يُعاد فحصه بواسطة مدقّق. والمخالفات تُعاد للتوليد من جديد ومعها القاعدة المحددة التي جرى خرقها.

قيود التوازن تُبقي اللعبة قابلة للعب. مجموع الإحصاءات الأساسية محصور في نطاق ثابت — من 280 إلى 360، أي قريبًا من مستوى بوكيمون البداية — مع مدى لكل إحصاء على حدة، وأي مواصفة خارج النطاق تُرفض من فورها. تُستخرج الحركات آليًا من شفرة pokeemerald، ثم تُصفّى إلى نمط النوع نفسه أو النمط العادي، مع إسقاط حركات القضاء بضربة واحدة وتأثيرات التفجير الذاتي والضرر الثابت أو المفرط. ثم تُفحص المجموعة الناتجة من حيث سلامتها: هل فيها حركات هجومية كافية، وهل فيها هجوم واحد على الأقل من النمط نفسه، وألّا تزيد الحركات عالية القوة عن واحدة. أما توزيع المستويات فيتولّاه الإطار على نحو حتمي، لا النموذج. وكل ما عدا ذلك مثبَّت — قدرة واحدة لكل نمط، ومعدل الإمساك، ومنحنى النمو، ونسبة الجنسين، والتوافق مع أقراص الحركات — بحيث يبقى الاختلاف الفردي محصورًا في خانات المخطط وتبقى الجولات قابلة للمقارنة.

قيود المظهر تمنع المُخرَج من التفكك. تأتي مخططات الجسد من قائمة بيضاء للظلال الخارجية التي تنجو في صورة 64×64: رباعي القوائم، وقارض، وطائر، وسحلية. ويُنتقى اللون من قائمة بيضاء مسمّاة، ويُشتق منه لون الجسد في الموسوعة اشتقاقًا آليًا. وتقتصر السمات على عبارة إلى ثلاث عبارات قصيرة جاهزة، مع قائمة حجب ترفض السمات البشرية والدم والأسلحة والنصوص. ويؤلّف الإطار التعليمة النهائية بنفسه ويلحق بها خاتمة ثابتة: مخلوق واحد، بكامل الجسد، بتشريح متماسك، بلا أطراف زائدة، وبتعبير هادئ.

وهو يعمل، ويمكن رؤيته وهو يعمل. في إحدى الجولات المسجّلة اقترح النموذج مجموع إحصاءات أساسية قدره 380؛ فردّه المدقّق ثلاث مرات — 380 ثم 360 ثم 340 — إلى أن حطّت المواصفة داخل النطاق عند 320.

كيف يعمل

اللعبة نفسها لا تولّد شيئًا. من يقوم بالعمل عمليةُ بايثون مقيمة على الحاسوب، والنصفان يتحدثان عبر صندوق بريد من الملفات يستطلعه نص Lua داخل mGBA في كل إطار.

  1. النص. نموذج محلي (qwen3:8b) يحوّل الكلمات إلى سجلّ نوع مُدقَّق.
  2. الصورة. نموذج صور يرسم لوحة مرجعية، ثم ثلاث لقطات متسقة مع بعضها: صورة القتال الأمامية، والخلفية، وأيقونة الفريق.
  3. التحويل. يُكمَّم الرسم إلى لوح ألوان مشترك من 15 لونًا ويُحوَّل إلى صيغة صور pokeemerald.
  4. الترميز. تصير الصور بيانات ثنائية لجهاز GBA: مربعات 4bpp و1bpp، وألواح gbapal، وضغط LZ77 متوافق مع الـ BIOS.
  5. الحقن. تُكتب البيانات الثنائية في منطقة محجوزة من الـ ROM.

الكتابة إلى الخرطوشة أثناء التشغيل تعني أن النسخة العاملة تلتقط النوع الجديد دون إعادة تشغيل، وأن التسلسل نفسه من البايتات يذهب إلى القرص، فيبقى التغيير بعد إعادة التحميل.

ما يظهر دائم ولا رجعة فيه. إنه يجول في العالم: إن هربتَ أو خسرتَ بقي فيه. وإن أسقطتَه، ضاع إلى الأبد.

التنفيذ

المولّد وإطار القيود ومرمّزات GBA ورقعة جانب اللعبة منشورة كاملة: github.com/takafumihoriuchi/my-own-pokemon-generation.

تذييل — عن التعلّق

يحسم النموذج الأوّلي مسألة تقنية. وخلفها تقف المسألة التي تعنيني حقًا: هل ينتهي بوكيمون وُلِّد من أجلك، ولا وجود له في أي مكان آخر، إلى أن يعني أكثر مما يعنيه بوكيمون جاء مع اللعبة؟

من لعبي نسختي الخاصة — عيّنة من واحد، ولا ينبغي أن يُقرأ فيها أكثر من ذلك — يبدو أن شرطين يحكمان الجواب.

ثمة حالة من خارج اللعبة تتحدث عن الشرطين معًا. بالعمل اليدوي مع ChatGPT، ذهابًا وإيابًا حتى رضيت، صمّمت نوعًا خاصًا بي — Hanagitsune. أنا متعلّق به. فقد صنعته ولم أطلبه، وما خرج تجاوز عتبة الجودة.

‏Hanagitsune من الأمام: ثعلب أخضر باهت ذيله شلال من الكرمات المزهرة. ‏Hanagitsune من الخلف، ويظهر طول الذيل المزهر كاملًا.
‏Hanagitsune — حارس الغابة، بذيل مزهر. حيثما ركض ينبت العشب والزهر، فيستدعي حياة جديدة حتى في الأرض الجرداء. وتُؤخذ هيئته علامةً على أن الغابة تنمو نحو مستقبلها.

وكلا الشرطين قابل للمعالجة. عملية صنع أعمق — اختيار ومراجعة ورفض — تحرّك الأول؛ ونماذج أفضل وإطار تعليمات مصمَّم بعناية أكبر يحرّكان الثاني. وإلى هناك يمضي هذا العمل.

فنتيجة النموذج الأوّلي إذن ليست حكمًا على السؤال. إنها السؤال وقد صار قابلًا للقياس: متغيّران صار بالإمكان تحريكهما عن قصد ومراقبتهما.

بُني على تفكيك pret/pokeemerald بوصفه بحثًا شخصيًا. لا يُوزَّع أي ROM ولا أي رقعة ROM ولا أي مادة من مواد اللعبة، وكل الصور المعروضة هنا أعمال أصلية مولَّدة بالذكاء الاصطناعي. Pokémon علامة تجارية لشركات Nintendo وCreatures Inc. وGAME FREAK Inc.؛ وهذا المشروع لا صلة له بها ولا يحظى بموافقتها.