בשנים האחרונות שוק קונסולות הגיימינג הניידות חווה רנסנס חסר תקדים. מכשירים עוצמתיים מאפשרים לנו לקחת משחקי AAA כבדים לכל מקום, אך המחיר הפיזי של החומרה הזו ברור לכל: מדובר במכשירים עבי-כרס, כבדים וחמים, שזקוקים לפתרונות קירור מסיביים ולטכנולוגיות מורכבות כמו DLSS או Frame Generation כדי לשרוד. מול המפלצות המודרניות הללו, רבים מאיתנו נזכרים בגעגוע בעיצובים הדקיקים והאלגנטיים של פעם, כמו ה-Nintendo Switch Lite או ה-PlayStation Portable המיתולוגית של Sony.
כעת, מפתח עצמאי ומוכשר החליט להוכיח שאפשר לעשות דברים אחרת, והצליח להפיח חיים חדשים לחלוטין בחומרה המזדקנת של ענקית הטכנולוגיה היפנית. באמצעות עבודת תכנות מבריקה ואופטימיזציה קיצונית, הוא הצליח להריץ את משחק היריות האייקוני ביותר בכל הזמנים, Counter-Strike, על גבי קונסולת ה-PSP בת ה-22 של Sony, והתוצאות פשוט מדהימות את קהילת הגיימינג והחומרה העולמית.
הכירו את OpenStrike: קאונטר סטרייק בתוך ה-PSP שלכם
הפרויקט המרשים הזה, שזכה לשם OpenStrike, הוא פרי פיתוחו של המתכנת Yifeng Wang. מדובר בגרסת קלון מבוססת קוד פתוח של משחק ה-FPS המיתולוגי, שנבנתה במיוחד כדי להתאים למגבלות החומרה הקיצוניות של ה-PSP. בעוד שהקונסולה הניידת הישנה מחזיקה במפרט טכני שהיה גורם לכל סמארטפון מודרני לצחוק, הפרויקט מצליח לרוץ עליה בקצב קבוע וחלק של 60 FPS.
הנתון המדהים ביותר בגרסה זו הוא ניצול הזיכרון הבלתי יאומן שלה. המשחק כולו דורש נפח זיכרון עבודה (RAM) של כ-12MB RAM בלבד כדי לפעול בצורה מלאה. מדובר בהישג הנדסי יוצא דופן, במיוחד בעידן שבו משחקים מודרניים דורשים עשרות גיגה-בייט של זיכרון רק כדי לעלות למסך הראשי, ומראה מה אפשר להשיג כאשר כותבים קוד יעיל ונקי מאפס.
קסם טכנולוגי: לבנות מנוע 3D מאפס עבור חומרה נוסטלגית
כדי להשיג ביצועים כאלה על קונסולה שיצאה לשוק בשנת 2004, המפתח לא יכול היה להשתמש באף מנוע משחקים קיים בשוק. במקום זאת, הוא בנה מנוע תלת-ממדי ייחודי בשם Pocket3D, המבוסס על שפת התכנות המודרנית והבטוחה Rust. בנוסף, הוא פיתח מנוע JavaScript ייחודי בשם PocketJS, המנהל את ממשק המשתמש ואת מערכת המודים של המשחק.
השימוש ב-PocketJS מאפשר לקהילת המפתחים והשחקנים ליצור שינויים, להתאים את המשחק אישית ולפתח תוכן חדש בקלות יחסית באמצעות API פתוח לחלוטין. מדובר בשילוב מבריק בין שפת מערכת מהירה ויעילה כמו Rust לבין הגמישות של סקריפטים ב-JavaScript, המאפשר למצות כל טיפת כוח מהמעבד המיושן של ה-PSP.
אופטימיזציה של פעם: איך מריצים מפות מורכבות על מסך זעיר?
המסך המקורי של ה-PSP מציג תמונה בגודל של 4.3 אינץ' בלבד וברזולוציה צנועה של 480x272 פיקסלים. כדי לגרום למפות המוכרות של Counter-Strike לרוץ ברזולוציה זו ללא השהיות, המפתח נאלץ להשתמש בטכניקות רינדור קלאסיות מתור הזהב של הגיימינג. אחת מהן היא שימוש במנגנון Binary Space Partitioning (BSP) כדי לחתוך ולמחוק מהזיכרון אזורים במפה שהשחקן אינו יכול לראות באותו רגע.
בנוסף, המנוע אינו מבצע חישובי תאורה או צללים בזמן אמת, דבר שהיה ממוטט את המעבד הגרפי של הקונסולה מיד. במקום זאת, כל מפות התאורה (lightmaps) מעובדות מראש ונשמרות ישירות בתוך צבעי הקודקודים (vertex colors) של המודלים בתלת-ממד. הוויתור על תאורה דינמית אולי הופך את המפות למעט פחות ריאליסטיות, אך הוא מעניק לחומרה הישנה את מרווח הנשימה הדרוש לה כדי לשמור על קצב פריימים יציב לחלוטין.
מה המצב של הפרויקט ואיפה אפשר לשחק בו?
נכון לעכשיו, הפרויקט מוגדר כהוכחת היתכנות (Proof of Concept) בלבד, אך הוא כבר מציע המון תוכן עבור חובבי הנוסטלגיה. המפתח בדק בהצלחה את כל 8 המפות המקוריות והמוכרות של Counter-Strike, והשחקנים יכולים להתנסות כבר עכשיו בקרבות אקשן סוערים מול בוטים מבוססי בינה מלאכותית. חלק מהמנגנונים המורכבים יותר, כמו תפריט קניית הנשקים המקורי בתחילת הסיבוב, עדיין לא הוטמעו במלאם, אך הבסיס המוצק של התנועה והירי כבר עובד נהדר.
הקוד של OpenStrike זמין להורדה בחינם לכל דורש בפלטפורמת GitHub, וניתן להריץ אותו הן על חומרת PSP מקורית (פריצה נדרשת) והן באמצעות אמולטורים על המחשב האישי או הסמארטפון. עם זאת, מטעמי זכויות יוצרים, המפתח אינו מספק את קובצי המדיה והטקסטורות של המשחק עצמו; השחקנים יצטרכו לספק בעצמם את קובצי האסטים של Counter-Strike המקורי כדי להתחיל לשחק.
הדור הבא של הנוסטלגיה: תמיכה גם ב-PS Vita
אם אין לכם PSP בהישג יד, תשמחו לשמוע שהפרויקט תומך באופן טבעי גם בקונסולת ההמשך של Sony, ה-PS Vita שהושקה בשנת 2011. ה-PS Vita נהנית מחומרה חזקה משמעותית וממסך OLED איכותי יותר בגודל 5 אינץ' וברזולוציה של 960x544 פיקסלים. הרצת המשחק על גבי קונסולה זו מעניקה חוויה חלקה אף יותר, עם גרפיקה חדה וברורה בהרבה.
פרויקטים מהסוג של OpenStrike מזכירים לנו שלפעמים, החתירה הבלתי פוסקת של תעשיית הגיימינג המודרנית לכיוון כוח עיבוד מפלצתי וכרטיסי מסך יקרים משכיחה מאיתנו את חשיבותה של אופטימיזציה חכמה. כאשר מתכנת מוכשר לוקח חומרה מוגבלת ומפיק ממנה יצירת אמנות טכנולוגית, זה לא רק תרגיל הנדסי מרשים – זהו שיר הלל לימים שבהם קוד יעיל היה לב ליבו של כל משחק וידאו.
התחבר כדי להגיב