זֶהוּהמכונאי, שם אלכס ווילשייר מזמין מפתח לעזור לו להעלות את המשחק שלהם על בלוקים ולקחת מפתח ברגים כדי לפרוץ את התכונה הטובה ביותר שלו, רק כדי לראות איך זה עובד.
מלכודת החצים שיורה באיש התנין כיגורם לו לשבור אותך. להיתפס באמצע קפיצה על ידי בומרנג שמלהטט אותך לעבר מלכודת קוצים,מותיר אותך המום מולו עד שהוא נובע.סופת חנויות.
אלה לא בהכרח האירועים האצילים ביותרספונקי, אבל הם מפתיעים, מצחיקים, מרתקים ולגמרי עקביים והגיוניים ונכונים. אולי הם לא בדיוק באשמתך, אבל גם הם, באמת, לא באשמת המשחק. הם תוצאה של סיבה גדולה -אתסיבה גדולה? – למהספונקימדהים:
המכונאי:איך לכל אובייקט ב-Spelunky יש תכונות יסוד משותפות
זה שם די עלוב. זה השורש של כל האינטראקציות בין הפריטים השונים, המלכודות, המפלצות והחפצים האחרים המאכלסים את עולמה, וכל הדברים המקריים, האומללים, המצחיקים, הזועמים והמופלאים שיכולים לקרות כתוצאה מכך.
והוא קיים בעיקר בשביל הפשטות. "אני חושב שבשלב מסוים שאלו אותי איך אני יכול לטפל בכל המקרים שעולים ב-Spelunky, כמו כשהפריט הזה מגיע לזה", אומר לי מתכנת הרימייק של Spelunky מ-2013, אנדי האל. התשובה היא שלכל אובייקט בעולם יש התנהגויות ותכונות ברירת מחדל. לדוגמה, אולמק הוא למעשה בלוק דחיפה מהולל. כשהכדורים המחוצצים בגיהנום נשלחים לעוף, הם הופכים לבולדרים. האופן שבו אנשי נץ, אנשי קרוקס ובעלי חנויות מקפצים כשהם זועמים - הם חולקים את אותן יכולות תנועה בדיוק.
"כשאתה מקודד משחק אתה חושב על אילו תכונות חולקות דברים באופן טבעי, נכון?" אומר דרק יו, יוצר הספלונקי המקורי. "אתה רוצה שהקוד שלך יהיה יעיל; אתה לא רוצה להמציא מחדש את הגלגל עבור כל דבר חדש."
כל העושר של Spelunky, לפיכך, הוא קיצור דרך של מתכנת, ודרך לבניית קוד. וכל החפצים שלו הם או פריט או מפלצת. ההבדל העיקרי הוא שמפלצות יורשות אוטומטית משתנים נוספים כדי להתנייד. "הם די דומים", אומר האל. "זה שמר על הקוד שלנו מאורגן ולא קיבלנו דברים מוזרים כמו קוביות דחיפה שהתרוצצו ויורים ברובי ציד".
אז אולמק, הבוס (סוג של) הליבה של המשחק, הוא פריט, לא מפלצת. הוא בלוק דחיפה, אבל יש לו מאפיינים מיוחדים המבדילים אותו, כמו יכולת לזוז עצמאית, לא להיות ניתנת לדחיפה על ידי השחקן, להערים לו קוביות דחיפה אחרות על ראשו, ולהיות מסוגל למחוץ את אלה. חוסם אם הוא קופץ והתקרה קרובה מדי, כדי שהוא לא ייתקע. אם אתה רוצה לראות איך הקוד נראה,יו והאל נתנו לנו גישה לחלק מקוד המקור של הגרסה המחודשת של Spelunky, מה שנותן קצת תובנה לגבי מה גורם לאולמק ולבעל החנות לתקתק.
מבחינת המשחק, הוא רק יורד ברשימת המאפיינים כדי להבין איך לפתור כל מצב מסוים. האם זה חפץ כבד? חפץ קל? חפץ שביר? האם זה יכול לקחת נזק? אם משהו שביר פוגע בקיר, אז הדבר נשבר. אם השחקן מצליף ברוח הרפאים, אז - טוב.
"אולי טוב להזכיר את רוח הרפאים, כי זה מקרה שבו ברירת המחדל הובילה למצב די מעניין", אומר יו. רוח הרפאים נועדה להיות בלתי מנוצחת, וככל שיו יודע, במקור שלו מ-2008, היא כן. אבל אנשים הבינו איך להרוג את רוח הרפאים בגרסה המחודשת, והדרך שבה הם עשו זאת תלויה בתכונות המשותפות הללו.
רוח הרפאים מופיעה כאשר אתה על רמה יותר משתי דקות וחצי, אם אתה לוקח את גולגולת הקריסטל, או אם אתה הורס יותר מדי מזבחות של קאלי, וזו מפלצת עם כמה מאפיינים מיוחדים. חפצים לא מתנגשים בו, הם לא גורמים לו נזק, ויש לו 9999 נקודות פגיעה. "אני חושב שהכנסנו את זה כנראה רק ככספת נכשל, נכון, אנדי?" אומר יו.
"נכון, כן, כשיישמתי את זה, היה צריך למלא את נקודות הפגיעה", עונה האל. אבל הוא גם היה מודע לכך שאולי יש רק *משהו* שיכול להזיק לו, אז הוא לא נתן לו נקודת פגיעה אחת. 9999 נראה נכון.
"זה בהחלט לא משהו שחשבנו עליו מאוד", אומר יו. "אבל כמובן שלעולם לא תוכל לשחק בזה מספיק בטוח, אני מניח."
התברר שהרוח עלולה להיפגע מלבה. לבה גורמת לכל מפלצת לאבד 99 נקודות פגיעה כשהיא נוגעת בה, הרג מיידי. יום אחד הבחין שחקן ברוח הרפאים שפגע בלבה והציג אפקט פגיעה, משהו שהוא ירש מהיותה מפלצת, והשחקן הבין שהיא גורמת נזק. וכך, די מהר הגיעה הגילוי שעל ידי הזזת רוח הרפאים פנימה והחוצה מהלבה 101 פעמים, ניתן להרוג אותה.
יו והאל היו מאושרים. "זה מאפיין מגניב של המשחק!" אומר יו. "זה לא ממש מפריע לנו כי זה הופך להיות חלק מהסיפור, כאילו הדבר הזה, כביכול בלתי ניתן להרוג, ניתן להרוג. שמישהו חשב איך להרוג את זה היה די נחמד."
דוגמה נוספת היא המואי, פסל שנמצא במערות הקרח המהווה חלק ממסלול עיר הזהב דרך המשחק. שחקנים אמורים לקבל את הפריט Ankh ואז להתאבד כדי למצוא את עצמם קמים לתחייה במואי עם פריט חדש, ה-Hedjet, ודלת שנפתחה בפיו של המואי. המואי עצמו נועד להיות בלתי ניתן להריסה, וזה היה קורה לולא הכדור והשרשרת.
"זה מטורף, נכון, כי זה נועד להיות עונש!" אומר יו. הכדור והשרשרת מחוברים אליך אם אתה הורס יותר מדי מזבחות קאלי, וזה מקשה על התנועה - אתה צריך לגרור את הכדור מאחוריך, או להרים אותו, כלומר אתה לא יכול לשאת משהו אחר. אבל מה שהכדור גם עושה זה לקרוע קוביות אם הוא מונח על מדף ואתה תלוי מתחתיו, תכונה שנועדה למנוע מהשחקנים להיתקע.
המואי הוא למעשה תמונה מכוסה בלוקים בלתי נראים, בלתי מנוצחים. ומה ששחקנים גילו,כלומר BaerTaffy וביסנאפ, הוא שהכדור יכול להרוס אותם בדיוק כמו כל אחד אחר. "הרצפות מוגדרות לבלתי מנוצחות אבל הכדור והשרשרת לא בודקים את זה בכלל", אומר יו. "מעולם לא שקלנו שמישהו ינסה להשתמש בו על המואי."
"אז הסיבה שזה לא בודק את דגל הבלתי מנוצחים היא שהבלוקים האחרים היחידים במשחק שהם בלתי מנוצחים הם בלוקי המסגרת סביב הרמה", אומר האל. "ידעתי כשקודדתי את הכדור שאין דרך להעלות אותו על גבי המסגרת כשהשחקן מתחתיו. אז לא היה טעם לבדוק את זה. זה היה ההשגחה. היה מקום אחר עם חסימות בלתי מנוצחות! זה פשוט לא היה משהו שחזינו מראש - יש כל כך הרבה אינטראקציות שצריך לקחת בחשבון שדי מובטח שמשהו ייפול בין הכיסאות". ובכל זאת, שוב, זה הפך לחלק מהספרות של המשחק, ולמרכיב קריטי שלריצת חצילים סולו מדהימה לחלוטין, ולכן הדבר היחיד שיו והאל עשו היה לשנות את הגרפיקה עבור המואי כדי לציין את הנזק שהכדור עושה.
עם זאת, לרוב, מערכת השימוש החוזר הזה היא בערך ההיפך מתקלות ובאגים - היא עוסקת באפשרות אינטראקציות מעניינות, והיא גם הקלה על פיתוח ובדיקות. "היינו צריכים רק למצוא את הדברים שלא חשבנו עליהם שכבר לא עובדים בצורה מקובלת", אומר יו.
"יש אנשים שאומרים שעדיף אם נקודד ביד מערכות בלעדיות לטיפול באינטראקציות, אבל הבעיה היא שאתה מפריד אותן משאר המכניקה של המשחק", אומר האל. "אם זה כבר מקיים אינטראקציה עם הכללים, למרות שזה קצת פחות טוב, יהיה לו כל כך הרבה יותר משחק עם שאר המשחק. זה יותר מעניין מיד, וזה הרבה יותר יקר מהמעט תוספת של ליטוש שאתה יכול לקבל עם יישום נפרד."
אז יש את הכדורים המסובבים בגיהנום, שעפים כשהם מנותקים ומתנפצים דרך הרמה כמו סלע - כי זה מה שהם הופכים פונקציונלית. כל פריט מוגדר בפשטות על ידי מספר מזהה, כך שהאל יכול לומר לכדור השפיץ שעכשיו הוא סלע; זה ישמור על המאפיינים הוויזואליים שלו אבל פתאום יתחיל ליצור אינטראקציה עם שאר המשחק כסלע. קרן ההקפאה דומה - אותו קליע (שלמשחק הוא פריט) יוצא גם מהאקדח וגם מהתא המטען של הממותה. זה אפילו נכנס לתמונה בסצנות, שפועלות במלואן במנוע המשחק. במבוא, הדמות ממוקמת על בלוקים בלתי נראים עם גרפיקת חול מלפנים, בעוד המשחק מדמה קלט של בקר מימין.
"זה בעצם נותן לנו אינטראקציה מעניינת בסוף המשחק שבו יורים אותך מהר הגעש, אתה נופל על הקרקע ואתה מפיל את הפריט שהחזקת בגלל שנפלת רחוק מדי. אבל אם יש לך מצנח הוא למעשה ייפרס ויצוף אל הקרקע." יו צוחק - זה הצחוק הכי טוב, צחקוק מדבק מטורף.
"ואתה יכול לשמור על הפריט שלך לאורך שאר הקטע ככה, וזה די מדהים, נכון?" ממשיך האל. "זה לא היה משהו שתכננו, אבל זה נגיעה קטנה ונחמדה. המשחק עדיין מתפקד, אפילו בסופו של דבר כשאי אפשר אפילו לשלוט בו יותר. זה מחזק את איך שהמשחק כולו עובד".
"אני די בטוח שהיו לנו באגים שבהם היית יכול לנחות בסצנת הסיום הזה ואתה יכול למות, כי אתה לוקח נזק לנפילה", אומר יו.
"התיקון היה די עלוב", אומר האל. "זה פשוט נותן לך חיים נוספים בתחילת הסצנה ואתה תאבד אותם כשתפגע בקרקע." יו צוחק שוב.
"ואז הדם!" אומר האל. "כשהקאתי את המומיה, ההקאה עצמה היא בעצם רק דם ירוק. הכנסנו את זה, בשלב מאוחר בפיתוח, וחשבתי, מה יש לנו שכבר עושה את מה שאני צריך? ובכן הדם, להקיא , אותו הבדל זה נוזל שיכול להתכווץ ולקפוץ או מה שלא יהיה, אז פשוט הכנתי גרפיקה חדשה של הדם שהפך לירוק והקאתי כמובן, מאוחר יותר בפיתוח, שמנו את זה בקפאלה אוספת דם אפילו לא הבנו שהאינטראקציה הייתה קיימת עד שאנשים אספו קיא של מומיה, זה נראה לי כמו דם הידע."
"אנשים בעצם עבדו את המומיות, נתקעו אותן על מדף מעליהן עם חור שהקיא יכול ליפול דרכו, אז הם פשוט מקיאים בלי סוף על השחקן עד שיש להם 99 בריאות!" אומר יו.
זו הסיבה ש-Spelunky הוא נהדר, אבל כדי להיות ברור, Spelunky רחוק מלהיות המשחק היחיד שמקודד בצורה זו.מבצר גמד לוקח את זה לרמה נוספת שלמה, וזה גם עומד בבסיס משחקים מSkyrimל-GTA V. אבל יש משהו מיוחד באופן שבו ספלונקי עובד. אולי בגלל שזה משחק פעולה וגם קריא מאוד, עם סיבה ותוצאה ברורה. ובחלקו משום שהאובייקטים שלו מוגדרים כך במאפיינים שלהם. כשמשהו לא צפוי קורה, כולם באמת שמים לב לזה, אפילו יו. "אני חושב שדברים שמפתיעים אפילו את המעצבים עצמם גורמים לעולם להרגיש הרבה יותר אמיתי, לעומת משהו שעוצב".
דרק יו כתב ספר על איך הוא יצר את ספונקי שייצא ב-29 במרץ.אתה בהחלט צריך להזמין אותו מראש עכשיו.
קוד הישות של Spelunky
כדי לתת לכם מושג כיצד ספלונקי מבין את מאפייני האובייקטים שלו, דרק יו ואנדי האל נתנו ל-RPS גישה לחלק מקוד המקור של הגרסה המחודשת, דבר שלא נחשף קודם לכן. להלן המאפיינים המכריעים של אולמק ושל בעל החנות.
בעל חנות
הדגל ה'קשוח' מציין כי בעל החנות אטום להתקפות שוט. אתה יכול גם לראות מה קובע את העובדה שיש לו רובה ציד ואיך אתה לא יכול להרים אותו.
case ENT_TYPE_MONS_SHOPKEEPER:
em = create_entity_monster(x, y, type, TEX_MONSTERS, ANIMSET_SHOPKEEPER, MONS_SIZE_SMALL, 0.2f, 0.5f, 0.4f, 10, 1, MONS_WEIGHT_MED, 6);
em->canBeStunned = true;
em->קשוח = נכון;
em->isHoldable = false;if (wantedLevel > 0)
{em->מצב = ENT_STATE_PATROL;
em->heldEntity = (EntityItem *)create_entity(x, y, ENT_TYPE_ITEM_SHOTGUN, true);
em->heldEntity->holder = em;
// em->heldEntity->heldOffset = Vector2(0.25f, -0.35f);
em->hasGun = false;}
אַחֵר
{em->state = ENT_STATE_IDLE;
em->hasGun = נכון;
em->פאסיבי = נכון;}
e = (ישות *)em;
לִשְׁבּוֹר;
אולמק
אתה יכול לראות את הדגלים שאומרים למשחק שאתה לא יכול לרשת אותו, להחזיק אותו, לרסק אותו - שאר המאפיינים שלו מוגדרים על ידי הטבע האמיתי שלו כחסום דחיפה.
case ENT_TYPE_ITEM_OLMEC:
ei = new EntityItem(x, y, 1.0f, 1.0f);
ei->סוג משנה = סוג;
ei->טקסטורה = textureManager->get_texture(TEX_OLMEC);
no->set_tile(0);
ei->גובה = 4.00f;
ei->רוחב = 4.00f;
ei->colisionDown = 4.0f/2.0f;
no->collisionUp = 3.0f/2.0f;
no->collisionSide = 3.5f/2.0f;
לא->סוליד = נכון;
ei->מום = נכון;
ei->canExplode = true;
ei->isHoldable = false;
לא->כבד = 0.0f;
ei->collideWithActive = true;
ei->בלתי מנוצח = נכון;
ei->canExplode = false;
ei->עומק = DEPTH_CLIMBABLE – 0.5f;
ביצה->ניתנת לריסוק = שקר;
ei->isReflective = נכון;
ei->מצב = ENT_STATE_RECOVER;
no->canBeWebbed = false;
//ei->collideWithFloor = false;
//ei->flying = true;
e = (ישות *)ei;
levelManager->add_active_floor(ei);
לִשְׁבּוֹר;