
شنو هو Infinite Pokémon؟
Infinite Pokémon هو نموذج أوّلي قابل للّعب مكتوب بـ TypeScript، ديال لعبة RPG بنمط Pokémon، برسومات pixel art، فيها اصطياد المخلوقات وعالم مستمر. التجربة الرئيسية ديالو هي عالم يقدر يبقى كيتكتب مع تقدّمك فاللعب. واحد النظام محلي ديال الذكاء الاصطناعي كيستعمل السجل المسجّل ديال المغامرة ديالك باش يقترح الأماكن، والشخصيات، والمحادثات، واختيارات المناطق الحيوية، وخيوط القصة الجاية.
المشروع ما كيخليش الذكاء الاصطناعي يتحكم فحالة اللعبة الرسمية. الحركة، والتصادم، والمعارك، والمخزون، والتقدّم، وقواعد اللعب الأخرى كيسهر عليها السيرفر. أي اقتراحات ديال الذكاء الاصطناعي خاصها تدوز من المخططات، والتحقق من الخرائط، وفحوصات الاعتماديات قبل ما تدخل للعالم. الأماكن اللي تزارت كتبقى ثابتة، بينما الوجهات الجديدة تقدر تتولّد وتتخزّن مؤقتاً قبل ما يوصل ليها اللاعب.
مهم: Infinite Pokémon مشروع تجريبي ديال المعجبين، مخصص غير للاستعمال التعليمي وغير التجاري. ماشي منتوج رسمي ديال Pokémon وما عندوش علاقة بـ Nintendo ولا Creatures ولا GAME FREAK ولا The Pokémon Company.
كيفاش كيخدم العالم المستمر
- السيرفر كيبقى هو صاحب القرار. اقتراحات الذكاء الاصطناعي ما تقدرش تحرك المدرب، ولا تمنح الانتصارات، ولا تتجاوز التصادم، ولا تبدل التقدّم مباشرة.
- العالم كيسجل الأحداث الفعلية. كل جولة كتخزن الخرائط، والاختيارات، وذكريات الشخصيات غير اللاعبة، واللاعبين، ومهام التوليد، وسجل الأحداث فقاعدة بيانات SQLite محلية.
- Codex كيقترح المحتوى الجاي. العملية المحلية ديال Codex عند المضيف كتقرا نسخة ثابتة وما كتبدلش، وكتنتج اقتراحات محدودة ومتوافقة مع المحرك الحالي.
- التحقق كيحمي وقت التشغيل. المخططات وفحوصات الخرائط كيحددو واش المحتوى المقترح يقدر يتقبل ولا لا.
- نقط الحفظ كتدعم التفرعات. ملي كتكمّل من نقطة حفظ قديمة، كيتخلق فرع مستقل عندو قاعدة البيانات والذكريات وسياق التوليد ديالو.
النظام حالياً كيعتمد على قوالب خرائط متحقَّق منها ومزوّدة ببذور، وماشي على لعب قابل للتنفيذ كيكتبو الذكاء الاصطناعي كيف ما بغا. النظام يقدر يوفّر الأسامي، والأوصاف، وملفات تعريف الشخصيات غير اللاعبة، والتحيات، واختيارات المناطق الحيوية، وخيوط القصة، وخصائص محدودة للتضاريس. المخلوقات والأغراض ووسائل النقل الجديدة تقدر تترسم انطلاقاً من وصفات pixel art متحقَّق منها، ولكن استيراد الصور المولدة من الخارج مازال ما تطبقش.
أهم المزايا
- خرائط وأحداث واختيارات قصصية وذكريات الشخصيات غير اللاعبة، كلها مرتبطة بالجولة وكتستمر.
- حركة، وتصادم، ومعارك، ومخزون، وتقدّم كيسهر عليهم السيرفر.
- استكشاف فردي باستعمال اتصال Codex المحلي ديال المضيف.
- معاينة تعليمية محدودة فـ خمسة ديال المناطق، ما كتدير حتى نداء للنموذج وما كتستهلك حتى token.
- لعب جماعي بنظام المضيف والانضمام، حتى لـ ثمانية اتصالات فالنفس الوقت و64 مدرب محفوظ.
- عمق قابل للضبط لتحضير الخريطة من 0 حتى 3.
- دفعات التوليد قابلة للضبط من كتلة وحدة حتى ثمانية كتل فالنفس الوقت.
- أدوات لمتابعة حالة الطابور، وإعادة المحاولة، والإلغاء ديال الوجهات اللي ما كملاتش.
- نقط حفظ ثابتة وفروع معزولة فالخط الزمني.
- محلات، والعلاج، ومواجهات مع المخلوقات البرية، ومدربو الطرق، والدراجات، ودور الحضانة، والبيض الهجين.
- سير العمل عبر المتصفح، ونسخة Electron المكتبية اللي كتخدم من المصدر، واختيارياً Docker على Linux.
المتطلبات الأساسية
بالنسبة لسير العمل المحلي العادي، ثبّت Node.js 22.13 أو أحدث. الإصدارات من Node.js 22.13 حتى 22.15 مدعومة، ولكن النسخ الاحتياطية ديال قاعدة البيانات كتستعمل حلاً بطيئاً كيوقف SQLite مؤقتاً عبر VACUUM INTO ملي كتكون واجهة النسخ الاحتياطي الجديدة عبر الإنترنت ما متوفراش.
Docker اختياري. ما محتاجش تثبّت Codex CLI بشكل عالمي ومستقل، حيث الاعتماديات ديال وقت التشغيل فيها Codex CLI 0.153.4. الجسر كيعطي الأولوية لـ CLI المحلي ديال المشروع باش يمنع برنامج عالمي قديم من يبدل التوافق.
الخيار 1: الإعداد بمساعدة مساعد ذكي
أقصر طريق للإعداد هو تثبيت المهارة الرئيسية ديال المستودع باستعمال Skills CLI:
npx skills add Shellishack/infinite-pokemon --skill infinite-pokemon
من بعد، طلب من Codex أو من مساعد ذكي متوافق:
استعمل $infinite-pokemon باش تجهز اللعبة وتشغلها ليا.
المهارة الرئيسية كتوجّه الوكيل فنسخ الملفات الناقصة، والتحقق من المتطلبات الأساسية، وتثبيت الاعتماديات، وبناء المشروع، وتشغيله. تثبيت المهارة بوحدو ما كيشغلش البرنامج. خاص مصدر المستودع؛ وnpx skills add infinite-pokemon ماشي اسم مستعار عالمي مدعوم.
تقدر تشوف المهارة الرئيسية على GitHub قبل ما تستعملها.
الخيار 2: التثبيت والتشغيل يدوياً
نسخ أو حمّل المستودع، حلّ التيرمينال فالمجلد الجذر ديالو، وشغّل:
npm install
npm run build
npm start
حلّ وحدة تحكم المضيف الخاصة فـ http://127.0.0.1:8788. دعم SQLite المدمج فـ Node يقدر يطبع تحذيراً تجريبياً؛ هاد التحذير متوقع فالمشروع.
ربط Codex والدخول للعالم
- اختار لاعب واحد.
- اختار الربط بـ Codex إلا ما كانش الاتصال المحلي تْتحقق منو من قبل.
- راجع ووافق على الإشعار الظاهر المتعلق باستعمال الرموز.
- كمّل تسجيل الدخول عند مزود الخدمة إلا طلب منك ذلك.
- تسنى التحقق القصير ديال nonce. منين كينجح، اللعبة كتدخل تلقائياً للخريطة اللي كتبدأ منها.
التحقّق ما كيحمّلش مهارة وما كيقراش الملفات؛ كيطلب غير تأكيد صغير ديال nonce والجواب ok. منين كيتربط، الخرائط القريبة كتوجد فالخلفية على حساب عمق التوليد المكوَّن. التحقّق، المحاولات الفاشلة، والتوليد فالخلفية يقدرو يستهلكو من الحصة ديال المزوّد، والحدود والفوترة العادية ديال المزوّد كتبقى مطبَّقة.
الترباط الصحيح كيتعاود يتستعمل. من بعد ما تعاود تبدا تشغيل مقبول، اللعبة كتفحص تسجيل الدخول المحلي بتأكيد صغير آخر. إلا فشل هاد الفحص، الواجهة كترجع لإجراء الترباط.
لعب بلا Codex باستعمال المعاينة التعليمية
باش تجرّب الميكانيكيات بلا الولوج للمزوّد ولا استعمال التوكن، اختار Single player، ومن بعد Play tutorial preview من شاشة الترباط بـ Codex.
المعاينة فيها خمسة ديال المناطق الخارجية واجدة والغرف الداخلية ديالها:
- Willowbrook: ساحة البلدة، جنانات، مختبر البروفيسور Fern، ودار منفصلة.
- Whisperwood Trail: شجر كثيف، مسالك متعرّجة، فضاءات محلولة، وكوخ ديال حارس الغابة.
- Cloverbank River: مروج ديال الزهور، نهر، قنطرة خشبية، ودار للاستراحة.
- Sunbreak Coast: مياه مفتوحة، مسالك حدّ الشاطئ، ممرات خشبية، ومحطة ساحلية.
- Waystone Terraces: مسالك على شكل زيگزاگ، مدرّجات حجرية، أعمدة طايحين، وملجأ ديال الأرشيف.
المعاينة ما كتدير حتى نداء للنموذج وما كتولّد حتى خريطة جديدة ولا خطط ديال الشخصيات غير القابلة للّعب. فالنهاية ديالها، تقدر تربط Codex وتكمّل فـ نفس الحفظ وتدخل للاستكشاف الكامل. المدرّب ديالك، والخرائط اللي تفتحات، والتقدّم فالتعليم كيبقاو محفوظين. حفظات المعاينة خاصة ومنفصلة على العالم الأصلي حتى كتدير الترقية؛ اللعب الجماعي كيتاح غير من بعد ما يتربط Codex ويتدار التحقّق.
التحكّم الأساسي واللعب
- تحرّك باستعمال WASD ولا مفاتيح الأسهم.
- وقف مباشرة حدّ شخصية، علامة، غرض، ولا حاسوب ديال غرفة، ووجّه ليه وجهك، وضغط E ولا Space.
- القرب بالقطر ما كيتحسبش كتفاعل.
- دخل لباب بناية باين، ولا واجهو من الخانة اللي حدّاه وضغط E.
- ضغط Escape ولا START باش تحلّ قائمة الفريق، الحقيبة، بروفايل المدرّب، اليومية، الخريطة، وقائمة الحفظ.
- ضغط على Escape مرة أخرى باش تسدّ القائمة.
الناس، العلامات، السياجات، الحيطان، والأثاث كيسدّو الحركة. وجّه وجهك للغرض ملي كتتفاعل معاه، وما تحاولش تدوز من خلالو. العشب الطويل يقدر يفعّل مواجهات مع مخلوقات برّية، والمدرّبين كيقترحو تحديات، والمرشدين كيعطيو تدريب للمبتدئين. القائمين على الملاجئ فالداخل يقدرو يداويو الفريق ديالك.
الملاجئ يقدرو يكونو فيهم تاجر وحارس ديال الحضانة. تقدر تشري المؤن، تشري درّاجة، ولا تجمع جوج مرافقين من المستوى 5 باش تحصل على بيضة هجينة. قوائم إضافية بحال CODEX وNURSERY وRIDES وRECORDS متاحة من START.
إعداد توليد الخريطة
حلّ START → SESSION باش تبدّل سلوك التوليد. عمق توليد الخريطة كيحدّد شحال القدّام كيحضّر المضيف العالم:
- العمق 0: التوليد عند الوصول.
- العمق 1: تجهيز الخرائط الأربعة اللي دايرين؛ هادا هو الإعداد الافتراضي.
- العمق 2: تجهيز 12 خريطة.
- العمق 3: تجهيز 24 خريطة.
الخدمة اللي فالانتظار كتقدّم الأولوية للخرائط الأقرب للاعبين، والخرائط المخزّنة مؤقتاً كيتعاود استعمالها. الوجهات اللي مازال ما واجداش كتعرض الحالة الحقيقية ديال الانتظار ولا التوليد، وما كتتظاهرش بأنها كاملة. كاينين أزرار إعادة المحاولة والإلغاء.
حجم دفعة التوليد الافتراضي هو ثلاثة ديال الكتل فـ نفس الوقت، وتقدر تضبطو من واحد حتى لثمانية. اختار واحد إلا كنت كتفضّل التوليد بالتتابع ولا بغيتي تحدّ من الخدمة المتزامنة. العمق والتزامن المرتفعين يقدرو يوجدو مساحة أكبر، ولكن يقدرو يزيدو استعمال المزوّد ونشاط التوليد.
إنشاء الحفظات، نقاط التحقّق، والفروع
حلّ START → SAVES باش تسيّر الجولات ونقاط التحقّق غير القابلة للتغيير. اختيار SAVE كينشئ نقطة تحقّق. إلا كمّلتي من نقطة تحقّق قديمة، اللعبة كتنشئ فرع منفصل بلا ما تعاود تكتب الخط الزمني الأصلي.
كل فرع عندو التاريخ ديال العالم، ذكريات الشخصيات غير القابلة للّعب، سياق التوليد، وقاعدة بيانات الحفظ التلقائي ديالو. الأحداث اللي كتوقع من بعد فالجولة الأصلية ما كتولّيش ذكريات فالفرع الجديد. بهاد الطريقة تقدر تستكشف نتائج بديلة مع الاحتفاظ بالمغامرة الأصلية.
حفظات المتصفح مرتبطة بتوكن جلسة غير مكشوف كيتخزّن فالمتصفح والأصل الحاليين. تبديل اسم المضيف، المخطط، ولا المنفذ، أو مسح تخزين المتصفح، يقدر يخلّي متصفح الضيف يفقد الارتباط ديالو بالمدرّب. اللعبة ما كتوفّرش واجهة يدوية ديال مفتاح الاسترجاع.
استضافة جلسة متعددة اللاعبين
- من شاشة العنوان، اختار Multiplayer → Host session.
- ربط وتحقّق من جلسة Codex ديال المضيف إلا كان هاد الشي ضروري.
- حلّ START → SESSION باش تلقى عنوان الضيف.
- شارك غير عنوان لعبة الضيف مع اللاعبين اللي كاتيق فيهم.
تقدر حتى تبدا بوحدك ومن بعد تختار Enable multiplayer من قائمة Session. الضيوف كيختارو Multiplayer → Join session وكيكتبو عنوان بحال http://HOST_LAN_ADDRESS:8787 ولا رابط HTTPS ديال المضيف. اللقب اختياري، وهو غير نص ديال الشخصية وماشي حساب.
غير المضيف كيربط Codex وكيجلب حصة التوليد. الضيوف كيتقاسمو الجولة الحالية والتاريخ ديال المضيف، ولكن ما كيربطوش Codex بوحدهم. اختيار Return to single player كيسدّ اتصالات الضيوف الحالية وكيمنع الانضمامات العمومية الجديدة، مع الاحتفاظ بالحفظات اللي فالخادم.
فهم جوج ديال منافذ الشبكة
0.0.0.0:8787هي خدمة اللعبة للضياف. الدخول العمومي كيتحل غير ملي كيتفعّل اللعب الجماعي.127.0.0.1:8788هي وحدة التحكّم الخاصة بالمضيف، مخصّصة للربط مع Codex، إعدادات التوليد، والتحكّم فالنسخ الاحتياطية.
ممنوع تعرّض البورت 8788 ولا تدوزو عبر reverse proxy. ما تعرّضش عملية Codex، مجلّد بيانات الدخول، ولا واجهات المضيف للضياف. إلا استعملتي proxy ولا tunnel، دوز غير خدمة الضياف فالبورت 8787.
إلى بغيتي تستضيف عبر الإنترنت، المستودع فيه إعداد نموذجي ديال Caddy كيدوز غير البورت 8787 وكيدعم WebSockets. خاص الـ proxy يحافظ على ترويسة Host الأصلية باش تخدم فحوصات نفس المصدر. العبور التلقائي من NAT وrelay مستضاف ما داخلينش.
شغّل نسخة التطوير ولا نسخة سطح المكتب
فالتطوير، شغّل سيرفر TypeScript ووسيط Vite مجموعين:
npm run dev
باش تحل نافذة المضيف ديال Electron، بنِ المشروع أولاً ومن بعد شغّل:
npm run build
npm run desktop
وضع Electron هو غلاف سطح مكتب كيشغّل المصدر، وماشي مُثبّت مُعبّأ. خاص Node.js يكون فـ PATH، ولا تعطي المسار المطلق ديالو عبر NODE_BINARY. ضغط على F11 باش تبدّل وضع ملء الشاشة، ولا بدا مباشرة فملء الشاشة:
npm run desktop:fullscreen
إعداد Docker اختياري لـ Linux
إعداد Compose المرفق موجّه لـ Docker Engine على Linux وكيستعمل شبكة المضيف. عمداً ما فيه حتى mapping ديال البورتات، باش يبقى listener ديال الإدارة على loopback متاح محلياً بلا ما يتحط فواجهة bridge.
docker compose build
docker compose up -d
docker compose exec game node node_modules/@openai/codex/bin/codex.js login --device-auth
كمّل المصادقة بوحدك بصفتك مالك السيرفر. الـ volume world-data كيخزّن العالم فـ /app/data، وcodex-private كيخزّن بيانات المصادقة والإعدادات فـ /home/node/.codex. حافظ على الجوج volumes وحمي codex-private حيث فيه بيانات الدخول للحساب.
شوف أخطاء السيرفر بهاد الأمر:
docker compose logs game
docker compose stop كيحافظ على الـ volumes. ما تشغّلش down --volumes إلا بغيتي تحتافظ بالعالم. الـ README كينصح بالأوامر الأصلية عوض إعداد Compose هذا على Windows وmacOS.
دير نسخة احتياطية للعالم ورجّعو
الأمر الأصلي npm start كيخزّن البيانات فـ ./data. Electron كيستعمل مجلّد world داخل مكان بيانات المستخدم ديال التطبيق. عيّن INFINITE_DATA_DIR لمسار مطلق إلا بغيتي طرق التشغيل المختلفة تستعمل نفس العالم.
باش تدير نسخة سريعة من قاعدة البيانات وهي خدامة، حلّ START → SESSION → إعدادات العالم → نسخ العالم احتياطياً. النسخة كتكتب فـ backups/. فيها حالة قاعدة البيانات، ولكن ما فيهاش كل ملفات السياق، log ديال التوليد، ولا بيانات الدخول الخاصة بـ Codex.
باش تدير أرشيف كامل:
- حبس السيرفر بطريقة نظيفة.
- نسخ مجلّد البيانات كامل، بما فيه مجلدات المعاينة إلا كانو محتاجين.
- رجّع النسخة لمجلّد مستقل.
- عيّن
INFINITE_DATA_DIRللمجلّد اللي ترجّع. - عاود التشغيل وربط Codex من جديد إلا كان ضروري.
ممنوع تعوّض قاعدة بيانات خدامة ولا تفصلها على ملفات SQLite WAL النشيطة. خَلّي الأرشيف الأصلي حتى تتأكد باللي العالم اللي ترجّع خدام مزيان.
متغيّرات إعداد مفيدة
INFINITE_DATA_DIR: قاعدة بيانات العالم، اللقطات، السجلات، والنسخ الاحتياطية.PORT: بورت لعبة الضياف؛ الافتراضي هو8787.ADMIN_PORT: بورت وحدة تحكّم المضيف على loopback؛ الافتراضي هو8788.CODEX_EXECUTABLE: اختيارياً، الملف التنفيذي ولا override ديالcodex.js؛ أغلفة shell مرفوضة.CODEX_HOME: اختيارياً، مجلّد ديال مصادقة وإعدادات Codex مملوك للمضيف.NODE_BINARY: الملف التنفيذي ديال Node.js اللي كيستعملو Electron.INFINITE_MAP_TIMEOUT_MS: المهلة القصوى لتوليد كل خريطة؛ الافتراضي180000والحد الأقصى600000.
نصائح متقدمة
دُوز الإدارة البعيدة بشكل خاص
فمضيف بعيد، صادِق مع Codex من shell الخاص بالمشغّل:
node node_modules/@openai/codex/bin/codex.js login --device-auth
ومن بعد دُوز بورت الإدارة ديال loopback من الكمبيوتر ديالك:
ssh -N -L 127.0.0.1:8788:127.0.0.1:8788 operator@your-server
حلّ http://127.0.0.1:8788 محلياً. اتصال SSH هذا tunnel للإدارة خاص بالمالك، وماشي proxy عمومي للعبة.
استعمل مجموعات الاختبار قبل ما تبدّل المحرّك
npm test
npm run build
npm run test:movement
npm run test:gameplay
npm run test:preview
npm run test:saves
npm run test:streaming
npm run test:variety
npm run test:e2e
npm run test:desktop
البيانات التجريبية المحددة كتختبر ميكانيكيات اللعبة بلا استدعاءات للمزوّد. وفحوصات المتصفح ديال الحركة واللعب كتستعمل المعاينة المحضّرة وكتأكد باللي ما كايناش استدعاءات لـ Codex.
عاود الضبط غير ملي يكون ضروري
الإجراء Settings → Full game reset فالشاشة الرئيسية مختلف على تسيير عمليات الحفظ. من بعد التأكيد بـ RESET، كيمسح جميع الجولات، نقاط التحقق، المحتوى المولّد، التقدّم، وإعدادات اللعبة. وكيحيد حتى موافقة Codex ديال اللعبة، ولكن Codex CLI كيبقى داخل للحساب.
القيود الحالية
Infinite Pokémon هو نموذج أوّلي وماشي إصدار واجد نهائي. التوليد باقي محدود بالتخزين المحدود، وحدود المزوّد، ووقت التوليد، والمفردات الحالية ديال المحرّك. التضاريس كتستعمل قوالب مصادق عليها، والذكاء الاصطناعي ما كيصاوبش ميكانيكيات تنفيذية عشوائية. التداول، وأنظمة مراكز الخدمات والـDojo كاملة، واستيراد الصور المولّدة من مصادر خارجية، متقدّمين كخدمة مستقبلية وماشي كميزات متوفرة دابا.
الحدود ديال اللعب الجماعي، اللي هي ثمانية اتصالات متزامنة و64 مدرّب محفوظ، هي حدود فالتنفيذ وماشي دليل على قدرة بحجم الإنترنت. الاستضافة عبر الإنترنت كتحتاج حتى هي للمشغّل يضبط الجدران النارية، وDNS، وHTTPS، وإعادة التوجيه، ولا نفق خاص حسب الحاجة.
الخلاصة
Infinite Pokémon كيجمع بين نواة RPG موثوقة وكتخدم بتحكّم الخادم، وبين مواصلة محدودة للعالم بمساعدة الذكاء الاصطناعي. بدا بالمعاينة بلا رموز، وربط Codex ملي تكون واجد للاستكشاف اللي كيتوسّع، واستعمل نقاط التحقق باش تجرّب مستقبليات بديلة. فاللعب الجماعي ولا النشر عن بُعد، خلّي وحدة تحكّم المضيف وبيانات الدخول خاصة، وعرّض غير خدمة الضيوف، وحافظ على نسخ احتياطية كاملة لمجلدات البيانات.
زُر مستودع Infinite Pokémon على GitHub باش تلقى الكود المصدري، والوثائق، وملاحظات التنفيذ، والمهارات، والاعتمادات، وإخلاء المسؤولية.
