Global Game Jam – משחק ב-36 שעות

כשאתה עובד במשרה מלאה אתה מגלה מהר מאד שזמן הפנאי שלך הוא מוגבל ביותר: אין לך זמן פנוי לשחק כמו שבטח היית רוצה, ובטח שאין לך את הזמן לפתח משחק בעצמך כמו שאולי היית רוצה.

וזה חבל, כי לפתח משחק זה משהו שרציתי לעשות כבר הרבה מאד זמן. בגיל צעיר יותר דווקא היה לי הרבה זמן פנוי אבל לא מספיק ידע טכני בשביל לפתח משחק, ועכשיו כשיש לי כבר את הידע והיכולת אז כבר אין לי כל כך זמן פנוי. אמנם כן השתפשפתי בעבר על כלי פיתוח ועריכה כאלו ואחרים, אבל אף פעם לא התייחסתי לזה בתור פרוייקט אמיתי. רק לא מזמן ניסיתי להיכנס לזה בצורה יותר רצינית יחד עם עוד מספר אנשים ולפתח משחק בזמן הפנוי (משאב שלא היה לנו כמובן, כי כולם היו עסוקים לפחות כמוני). זה לא החזיק יותר מידי זמן.

אני מניח שהייתי יכול להרוג שתי ציפורים במכה אחת אם הייתי פשוט עובד בפיתוח משחקים. הבעיה היא שלמרות שבמדינת ישראל יש כביכול את התשתית המתאימה, דווקא בתי פיתוח למשחקים בפועל אין והענף הזה לא פשוט קיים כאן (אני לא אכנס כרגע לנושא הזה ולסיבות לכך, אבל אולי עוד נקדיש לו פוסט בעתיד).

לכן, ככשמעתי לא מזמן על Global Game Jam שנערך השנה בפעם השניה (בעולם ובישראל) הבנתי שאין לי תירוץ להתחמק. מדובר באירוע שנוסד בשנה שעברה, ובמסגרתו מתכנסים עשרות מפתחי ומעצבי משחקים (חובבים ברובם) למשך 48 שעות רצופות במתחמים שונים ברחבי העולם, מתחלקים לקבוצות וויושבים על פיתוח משחק עד שיוצא עשן (ובתקווה גם יוצא משחק). הגעתי למסקנה שסופשבוע אחד זה משהו שאפשר לשרוף על חוויה יחודית מהסוג הזה, ועל זה אני אספר היום.

image

הSite שנבחר בישראל לאירוע הוא מרכז המדעים בהרצליה, ולשם הגעתי ביום שישי בבוקר עם יעד אחד: לראות האם אני יכול להרים אבטיפוס למשחק בטכנולוגיית XNA (טכנולוגיה מבוססת שפת C# של מיקרוסופט, שהיתרון המרכזי שלה מלבד היותה חינמית הוא שאת המשחקים שמפתחים באמצעותה ניתן להפיץ בצורה פשוטה יחסית גם למחשב וגם לXbox 360 – משהו שלא היה אפשרי בעבר). אני מניח שמה שאני הולך לתאר כאן הוא סוג של פוסטמורטם שכותבים אחרי פיתוח משחק, רק שבמקרה שלי אין עדיין משחק אמיתי. בעיות וקשיים בפיתוח שאפשר לחלוק דווקא יש לי בשפע 🙂

הבעיה הראשונה שלי נבעה מהבחירה שלי בXNA
רוב די גדול של האנשים שהגיעו לאירוע היו די חסרי ניסיון ו/או עניין בשפה ובטכנולוגיה הזו. אני ממש לא יודע מה הרקע של כל אחד ואחד מהם, אבל רובם העדיפו להתמקד בטכנולוגיות פשוטות יותר כמו Flash, משחקי דפדפן ו-Unity – מעין סביבה לפיתוח משחקי תלת מימד (דמויית Unreal Engine ושלל מנועים אחרים למי שמכיר) שהפכה פופולארית לאחרונה בקרב מפתחים בגלל היותה חינמית ואולי עוד יותר בעיקר בגלל הפיצ’ר של פיתוח משחקים לאייפון באמצעותה. כל אלו הן טכנולוגיות הרבה יותר מוגבלות מXNA, אבל כאלו שמאפשרות בדרך כלל קצב פיתוח הרבה יותר מהיר שמתאים לבניה מהירה של אבטיפוס במסגרת זמן מוגבלת כזו. אני מניח שאם לא הייתי מעוניין בעצמי להשתפשף בXNA אז אולי הייתי הולך בעצמי על כיוון פשוט יותר ובוחר באחת האלטרנטיבות, אבל לא באתי לפה בשביל לעשות לעצמי חיים קלים – באתי לבחון האם אני יכול לפתח משחק בטכנולוגיה כזו שיהיה ניתן להריץ גם על הקונסולה.

הבעיה השניה נבעה מתחומי העיסוק של האנשים באירוע
רובם הגדול של האנשים באירוע הגדירו את עצמם כ"מתכנתים" או "מעצבי משחקים". היו בודדים שעסקו דווקא גרפיקה ואנימציה ולכן לא כל הפרוייקטים כללו אנשי ארט נחוצים, שלא נדבר על הבנאדם הבודד היחיד בין כל האנשים שהגדיר את עצמו כעוסק בסאונד (ואחר כך נאלץ לפרפר בין כל מיני פרוייקטים, כולל בקשות ממני לקצת עזרה עם המשחק שלי).
דווקא תמיד הנחתי שיש בארץ הרבה מאד בוגרי לימודי גרפיקה/אנימציה שמגלים שאין יותר מידי דברים מעניינים בשוק לעשות עם ההכשרה הזו, וחשבתי שיהיו לא מעט כאלו שירצו להוסיף משחק לפורטפוליו שלהם. אולי פשוט מארגני האירוע לא הגיעו אליהם, כי מראש הפרסום שלו היה מוכוון לאנשים שמתעניינים בפיתוח משחקים.

הבעיה השלישית נבעה ממגבלות האירוע
ידעתי מראש שהזמן לפיתוח הוא קצר ולכן מראש החלטתי לבחור לפתח משחק פלטפורמה דו מימדי. הסיבה היא שמיקרוסופט מספקת עם הXNA תבנית מוכנה מראש לסוג כזה של משחק , וזה חוסך הרבה מאד קוד ועבודה ראשונית ומאפשר לי להתחיל מנקודת פתיחה טובה בהרבה. אבל בנוסף למגבלה הזו, גיליתי שגם האירוע עצמו מגביל אותך ויש בו דרישה לפתח משחק תחת שתי מגבלות.
המגבלה הראשונה היא קונספט משותף שנבחר וצריך להיכלל בכל המשחקים, והשנה הקונספט היה הטעייה (deception). המגבלה השניה היא שהמשחק צריך להכיל לפחות אחד משלושה אלמנטים שנבחרו: מטאטא, חדר, או נול אריגה (באנגלית זה נשמע כמובן יותר טוב: broom, room or loom).
בנקודה הזו הייתי צריך לחשוב מהר על קונספט למשחק שמשלב גם את המגבלה שאני הצבתי (משחק פלטפורמה) וגם את המגבלות שהציב לי האירוע. הדבר הכי טוב שמצאתי ב-5 דקות סיעור מוחות עצמאי הוא משחק פלטפורמה שבו רודפים אחרי מכשפה על מטאטא שחטפה את החברה שלך ומחזיקה אותה על ראש של הר – ככה שעולם המשחק בעצם יהיה פלטפורמה ורטיקלית שבה מטפסים כל הזמן לגובה (בדומה למשחקים קלאסיים כמו Ice Climbers או Icy Tower). את אלמנט ההונאה גנבתי ממשחק פלטפורמה קלאסי אחר: בכל פעם שתגיעו לראש ההר תגלו שבמקום החברה שלכם נמצא שם דחליל, ועליו הפתק "Your girlfriend is on another mountain" ותעברו לשלב הבא. זה עבד למריו, אז למה שזה לא יעבוד גם כאן?

הבעיה הרביעית נבעה מהצוות שלי
כלומר הצוות שלא היה לי: מראש לא היה לי עניין בשכנועים ומכבשי לחצים. בתחילת האירוע תיארתי את המשחק שאני רוצה לפתח ולא התחלתי לנסות ולהסביר לכולם למה הם חייבים להצטרף דווקא לזה. רוב האנשים חיפשו משחק עם קונספט יחודי ו”שונה” ממה שעושים בתעשיית המשחקים הסטנדרטית בדרך כלל (לא שהם היו שותפים לתעשיית המשחקים הסטנדרטית), ככה ש”סתם” משחק פלטפורמה לא כל כך דיבר אליהם.

בסופו של דבר מצאתי במקרה שני אנשים שכן שקלו להצטרף אלי במידה והם לא יצליחו להתניע רעיון משחק משלהם, רק שאיכשהו הם הצליחו להרים את מה שהם רצו (לצערי, אני מניח) ולכן נשארתי בלעדיהם. אנשים אחרים שמידי פעם עברו באיזור הציעו את העזרה שלהם מיד כשיסיימו עם משהו אחר שהם עובדים עליו, רק שבפועל המשהו הזה תמיד התארך והסתבך (כצפוי מפיתוח משחק מחשב) כך שמצאתי את עצמי מפתח את המשחק די לבד: החל מכתיבת הקוד, דרך עיצוב השלב וחוקי המשחק, וכלה בגרפיקה די מכוערת שהכנתי למשחק עם כישורי הציור המוגבלים שלי. בנקודה הזו גם גיליתי שכשאני עובד לבד, כל רגע שבו אני הולך ומנסה לגייס אנשים אחרים הוא רגע אחד פחות להשקיע במשחק עצמו, ולכן העדפתי להתמקד במשחק.
ביום השני נחלצו לעזרתי בחורה אחת שיצרה עבורי קצת גרפיקה למשטחי הפלטפורמה עצמם, והבחור ההוא מהסאונד שארגן בשבילי כמה אפקטים קוליים בסיסיים ומוזיקת רקע בקצת הזמן שנותר. בגלל מגבלות הזמן נאלצתי להישאר גם עם חלק מהגרפיקה של תבנית המשחק המקורית (כמו למשל הדמות הראשית), משהו שדווקא רציתי להימנע ממנו כדי לתת למשחק אופי קצת יותר יחודי ולצערי לא הספקתי לעשות.

הבעיה החמישית נבעה ממגבלות הזמן
הגלובאל גיים ג’אם הוא אירוע שבהגדרה שלו הוא 48 שעות: מיום שישי ועד יום ראשון. אבל בישראל שבוע העבודה מתחיל כבר בראשון ולכן לא היתה אפשרות (גם מבחינת המקום וגם מבחינת האנשים עצמם) למשוך את האירוע עד הסוף הרשמי שלו. אז בפועל היתה לנו מגבלת זמן קצרה עוד יותר של 36 שעות בלבד, ואם נוסיף לזה את העובדה שתחילת היום נשרפה על הגעה, התארגנות ולוגיסטיקה – אנחנו נשארים עם בערך 32 שעות רצופות בלבד לפיתוח משחק. זה לא הרבה, וזה עוד יותר לחוץ אם אתה מפתח את כל המשחק לבד.

המעניין הוא שדווקא בגלל זה ציפיתי למשהו שונה לחלוטין מהכנס עצמו: הנחתי שמאחר וקיימת מגבלת זמן כל כך משמעותית אנשים ינצלו כל דקה פנויה בשביל פיתוח המשחק, יביאו שקי שינה בשביל לנמנם קצת בתורות, ויכנסו למוד עבודה אינטנסיבי בלי יותר מידי הפסקות ושטויות. הרי הייתי גם בצבא וגם בלימודים בלא מעט סיטואציות כאלו של לילות לבנים כדי לעמוד במגבלות זמנים מאד לחוצות, ומראש באתי ערוך לאירוע שהנחתי שיעבוד בצורה כזו.
בפועל הופתעתי לגלות שכבר בלילה לא נשארו יותר מידי אנשים באזור: רוב האנשים חזרו לתפוס שינה טובה בבית שלהם, ואלו שגרו רחוק מצאו לעצמם חברים באזור או פשוט תפסו פינה נטושה במבנה שבה הם הלכו לישון. כשהרמתי את הראש מהמחשב בערך בחצות יכולתי לספור את האנשים שעוד עבדו על שתי ידיים. כשהרמתי את הראש בשעה ארבע לפנות בוקר יכולתי לספור בעיקר את עצמי. זו היתה מבחינתי קצת אכזבה, כי תמיד חשבתי שפה יהיה היתרון היחסי של מפתחים ישראלים באירוע מהסוג הזה על פני כל מיני אירופאים ואמריקאים שעובדים מ-8 עד 5.

הבעיה השישית נבעה מהתמקדות ביעדים
כמובן שרציתי לעשות משחק שיציע גם כמה עשרות שלבים בסביבות שונות והרים סובבי עולם, גם קו-אופ לשני שחקנים, גם ניקוד וטבלאות שיאים וגם קטעי קישור בין השלבים השונים עם אנימציה או לפחות גרפיקה כלשהי. אבל מהרגע הראשון ידעתי שאני אצטרך לעשות סינון מאד רציני של מה בדיוק להכניס למשחק.
הבעיה היא שכשאתה מפתח משחק, דווקא הדברים הקטנים יכולים להתגלות כהרבה יותר מסובכים ממה שהם נראים בפועל. אחד הדברים למשל שניסיתי להוסיף וחשבתי שיהיו מאד בסיסיים ליישם הוא האופציה לdouble jump (קפיצה כפולה בכיוון ההפוך שהדמות יכולה לבצע אחרי שתקפוץ בכיוון מסויים אל קיר כלשהו), אבל ברגע שהכנסתי את זה גיליתי שזה יוצר פתח לשלל בעיות אחרות שאפילו לא דמיינתי. אחרי בערך שעתיים ששרפתי על הפיצ’ר הזה הגעתי למסקנה שאני אצטרך פשוט לחתוך אותו אם אני רוצה לעמוד במגבלת הזמן – החלטה מאד כואבת שהופכת ליותר ויותר כואבת ככל שאתה משקיע יותר זמן במשהו ספציפי.

הבעיה השביעית נבעה מחוסר בPlaytesting
כשאתה מפתח משחק בעצמך, אף פעם אין לך את הפרספקטיבה הנכונה לבדוק כמה הוא טוב, ברור, נוח ואינטואיטיבי למשתמש. וכשאתה נמצא בכזה לחץ אין לך בכלל את הזמן לבדוק את המשחק בעצמך. רק אחרי האירוע כשחזרתי הביתה וונתתי לחברה שלי לנסות את המשחק באותו הערב, שמתי לב פתאום כמה בעייתית עבורה היא הגרפיקה של משטחי הפלטפורמה: הכנסתי למשחק פלטפורמות שבירות ופלטפורמות בלתי שבירות. אמורים להיות הבדלים ויזואלים בין סוגי הפלטפורמות כך שניתן לראות את הסדקים בפלטפורמות השבירות, אבל פתאום הסתבר לי שלמשתמש הטיפוסי ההבדלים האלו פשוט לא נראים ברורים מספיק.
אני, בתור אחד שחי בתוך המשחק שלו, לא יכולתי בכלל לשים לב לבעיה כזו: את השלבים עצמם כבר טחנתי בעצמי כשהגרפיקה של הפלטפורמות היתה סתם Placeholder מכוער שעשיתי, ואת העיצוב שלהם כבר זכרתי בעל פה בשלב שבו הכנסתי את הגרפיקה האמיתית. אז גם אם הפלטפורמות היו נראות זהות לחלוטין אני בכלל לא הייתי שם לב לזה – בראש שלי כבר התקבעה התמונה המלאה של השלב בצורה יותר מוחשית ממה שמופיע על המסך. זו לא רק דוגמא קלאסית לחשיבות של gameplay before graphics, אבל גם לחשיבות של פשוט לתת למישהו לשחק במשחק שלך כשעוד יש לך זמן לשנות דברים לפני ההגשה (זה משהו שהיה ניתן לטפל בו בפחות מ-10 דקות להערכתי)

ציינתי פה בעיקר בעיות, תקלות וקשיים בפיתו – אבל היו גם דברים טובים, כן?
בסופו של דבר מצאתי את עצמי בשתי דקות ל-8 עדיין עובד על הדברים האחרונים בקוד של המשחק, מכווץ אותו ושולח אותו לעמוד המשחק שלי באתר. הוא בוודאי לא יצא כמו שרציתי שיצא בהתחלה, וכלל רק מספר מצומצם של שלבים שכללו סתם דברים שזרקתי פנימה – אבל הוא בכל זאת עבד.
בשורה התחתונה באמת עשיתי את זה: פיתחתי משחק תחת כל מיני אילוצים, די בעצמי, אחרי לילה לבן ובפחות מ-36 שעות. הספקתי לעשות בזמן הקצר הזה הרבה יותר מכל מה שעשיתי במשך כמה שבועות של פרוייקט שעשיתי בעבר ללא מגבלת זמן, ועל הדרך גם הספקתי ללמוד את מה שרציתי ללמוד.

מה הלאה? לא יודע. בסופו של דבר הסופשבוע הזה היה הצלחה די גדולה מבחינתי, ולראות כמה מהדברים היצירתיים והמוצלחים שאנשים אחרים בכנס עשו בכלל היה אחלה בונוס. אולי בכנס הבא אני כבר לא אבוא עם ראש מקובע ומשהו שאני רוצה להוכיח לעצמי שאני יכול לעשות ובמקום זה אצטרף לקבוצה קיימת עם רעיון מגניב. ומאחר וכבר התחלתי לעשות משחק ויש לי משהו חצי אפוי ביד, אני שואל את עצמי אם אולי כדאי לנסות ולהרים מאב הטיפוס הזה משחק אמיתי – אם רק יהיה לי זמן לזה. מה שבטוח: בסוף השבוע הקרוב אני מתכנן בעיקר לנוח בבית…

About swym