Roguelikes הם הז'אנר האהוב עלי במשחק ומִבטָא אִירִי[אתר רשמי] הוא אחד ה-roguelikes האהובים עלי. יש לו את המערכות המשתלבות בקפידה של הז'אנר, שמניעות שחקנים לקראת החלטות חשובות ומייצרות אנקדוטות מהנות בשפע, אבל היא גם מציגה אותן באמצעות ממשק נגיש וללא הנפיחות שעלולה לגרום לעמיתיו להפחיד או להתעייף לשחק.
אני חושב שחלק גדול ממִבטָא אִירִיהמשיכה של זה טמונה בדור הרמה שלו, שיוצר חללים צפופים מלאים בפרטים סביבתיים מעניינים, עם מלכודות שיש להימנע מהן, תהומות ליפול אליהן ויופי ASCII מוזר. דיברתי עם יוצר המשחק, בריאן ווקר, על מטרות העיצוב שלו לרמות האלה, איך אתה מאזן משחק שאתה לא יכול לחזות, ועל התהליך המדויק שבו המשחק יוצר את הרמות האלה.
פֶּתֶק:לפני מספר חודשים פרסמתי קול קורא לרעיונות למאמרים מקהילת התומכים, בשם העיתונאי משחקי העם. אימצתי לזוז, אבל מאמר זה מייצג את הראשון מתוך תקווה רבים שהולידו על ידי הרעיונות שלך. בפרט, מאמר זה הוא תגובה לבקשה של הקורא amateurviking לראיונות נוספים המתייחסים בפירוט ליצירת חלק בודד במשחק. תודה על התמיכה באתר, amateurviking!
RPS: מה היו המטרות שלך ליצירת הרמות ב-Brogue?
בריאן ווקר:בעיקר, המטרה שלי הייתה שהצינוק ירגיש קונקרטי ומרגש -- לא רק מצע שטוח למפלצות ופריטים, אלא מקום חי ואווירה לחקור, מלא במידע שימושי ומשמעות טקטית. אינדיאנה ג'ונס היא תבנית טובה: הרפתקן בודד במקום עוין, מונחה על ידי אור לפידים, מחפש רמזים, מחפש אוצר, שורד בשכלו, לעולם לא יודע מתי איזו מכונות תופת יופעלו ויגרום לרצפה להתמוטט, או בשר... אכילת חולדות כדי לפרוץ מהקירות, או מים כדי להציף את האזור. אני רוצה שתהיה לו איכות בעיצוב יד שמתגלה בשלבים כשאתה מגלה שמנוף נסתר פותח מעבר מלא תולעים מפותל למפתח שפותח כספת של חפצים נסתרים. רמות שנוצרו באופן פרוצדורלי כנראה לעולם לא יסגרו את הפער עם רמות בעבודת יד שתוכננו על ידי מומחים, אבל אני רוצה לדחוף את זה קרוב לסטנדרט הזה ככל שאני יכול -- כולל מסיבות אנוכיות, כדי שאוכל לחקור רמות חדשות ולהפתיע לפי הסודות שלו כמו כל שחקן אחר.
RPS: מה שלב אחר שלב - הנוהל, נניח - עבור הדור הפרוצדורלי של הרמות של ברוג? נא להיות ספציפי.
הֲלִיכוֹן:האלגוריתם מתחיל בחדר אחד, המוצב באקראי ברשת ריקה. לאחר מכן, הוא מצייר חדר נוסף על רשת אחרת, אותו הוא מחליק כמו חתיכת צלופן על המפלס עד שהחדר החדש משתלב היטב בחדר קיים מבלי לגעת או לחפוף. כאשר יש התאמה, הוא מעביר את החדר מהצלופן לרשת הראשית ומוציא דלת. זה עושה את זה שוב ושוב עד שהוא לא יכול להתאים לעוד חדרים.
החדר הראשון הזה יכול לפעמים להיות "מערה" - צורה גדולה, מפותלת, אורגנית שממלאת הרבה מהחלל של המפלס. אלה נעשים על ידי מילוי הרמה באופן אקראי עם 55% רצפה ו-45% קיר, ולאחר מכן הפעלת חמישה סבבים של החלקה. בכל סבב החלקה, כל תא רצפה עם פחות מארבעה תאי רצפה צמודים הופך לקיר, וכל תא קיר עם שישה או יותר תאי רצפה צמודים הופך לרצפה. תהליך זה מאלץ את הרעש האקראי להתלכד ולהתכווץ לצורת כתם מתפתל. האלגוריתם בוחר את הכתם הגדול ביותר שמחובר במלואו וקורא לזה החדר הראשון.
יש חבורה של טכניקות שונות לציור חדר, שנבחרות באקראי בכל פעם -- לדוגמה, שני מלבנים גדולים מרוחקים זה על זה, צורת סופגניה גדולה, עיגול או "כתם" שנוצרו כמו המערה שתוארה לעיל אבל עם ממדים קטנים יותר. לפעמים, ניצור את החדר עם מסדרון שיתלווה ממנו בנקודה אקראית, ונדרוש שקצה המסדרון יתחבר לחדר קיים.
בשלב זה יש לנו רשת מחוברת פשוט של חדרים בעלי צורה שונה. הבעיה היא שאין לולאות בגיאומטריה; המפה כולה היא עץ בודד, כאשר לכל חדר אחרי הראשון יש בדיוק חדר "הורה" אחד (שהוא צמח ממנו) וכל מספר חדרים "ילדים" (שצמחו ממנו). מסתבר שזה לא כיף לחקור סוג כזה של רמה, כי זה דורש הרבה חזרה לאחור וקל להיתקל בפינה על ידי מפלצות. אז, אנחנו מתחילים לבדוק את קירות המפלס. אם נוכל למצוא קיר שיש לו תא עביר משני צידיו, שבו שני התאים נמצאים במרחק מסוים לפחות זה מזה מבחינת איתור נתיבים, אנו מוציאים דלת (או דלת סודית). תעשה את זה כמה פעמים ותקבל רמה שמחוברת יפה.
ואז אנחנו עוברים לאגמים. אגמים הם מסות מסוג שטח מסוים - מים, לבה, תהום או גופרית - שיכולות להשתרע כמעט על כל המפלס. הם אטמוספריים, הם מאפשרים התקפות למרחקים ארוכים, והם כופים מבנה על המפלס בקנה מידה גדול כדי למנוע ממנו להרגיש כמו מבוך הומוגני של מעברים מפותלים. אנחנו שולפים את הצלופן ומציירים עליו אגם בשיטת האוטומט הסלולרי, ואז אנחנו מחליקים את הצלופן למקומות אקראיים עד שנמצא מקום שעובד - שבו כל החלקים העבירים של המפלס שאינם מכוסים ליד האגם עדיין מחוברים במלואם, כך שהשחקן לעולם לא נדרש לחצות את האגם. אם עשרים ניסיונות אקראיים לא מצליחים למצוא מיקום כשיר, נשרטט אגם קטן יותר וננסה שוב. אם נוכל למצוא מיקום כשיר, נפיל את האגם על המפה שם ונדרוס את השטח שמתחתיו. לחלק מהאגמים יש זרים - מים רדודים מקיפים מים עמוקים, ושטח "קצה תהום" מקיף תהומות - ואנחנו שואבים את זה בשלב זה.
בשלב הבא מופיעים המאפיינים המקומיים הטעימים של השטח - עמודי דשא, זרמים של קריסטל, בורות בוץ, מלכודות נסתרות, פסלים, לפידים ועוד. אלה מוגדרים בטבלה ענקית של "מחוללים אוטומטיים" המציינת את טווח העומקים שבהם כל תכונה יכולה להופיע, מה הסיכוי שהוא וכמה עותקים לעשות. עבור כל אחד מהם, אנו בוחרים מיקום אקראי ומוציאים אותו. הרבה מהם משרצים בטלאים. אלה נוצרים על ידי בחירת מיקום ראשוני ולתת לו להתרחב באקראי החוצה משם, עם ההסתברות של הורדת התרחבות נוספת עם כל התרחבות - כמו לשפוך קצת צבע על רצפה לא אחידה ולתת לו לזרום החוצה לתוך שלולית.
השלב העיקרי הבא ביצירת רמות הוא מה שאני מכנה המכונות. זה החלק המסובך ביותר בדור הרמות ללא ספק. מכונות הן מקבצים של תכונות שטח הקשורות זו לזו. בכל פעם שאתה רואה מזבח, או מקרה שבו אינטראקציה עם שטח בנקודה מסוימת גורמת לשטח בנקודה מרוחקת לעשות משהו, אתה מסתכל על מכונה. יש טבלה מעוצבת בעבודת יד של מכונות - 71 מהן כרגע - שמנחה היכן ולמה כל מכונה צריכה להופיע ואילו תכונות עליה ליצור. כל תכונה של מכונה מציינת עוד יותר אם היא צריכה להשריץ רק ליד פתח החדר, או רחוק ממנו, או מולה, או לעולם לא במסדרון, או רק בקירות המקיפים את המכונה, וכן הלאה.
ישנם שלושה סוגים של מכונות - מכונות חדר שתופסות את החלק הפנימי של אזור עם נקודת חנק בודדת, מכונות דלת שמופקות על ידי מכונות חדר כדי לשמור על הדלת, ומכונות שטח שיכולות להשריץ בכל מקום ולהתפשט החוצה עד שהן מתאימות. גוֹדֶל. מכונות מסוימות ילחצו חלק מהרמה ויפעילו אלגוריתם חדש ליצירת רמה עם פרמטרים שונים על האזור הספציפי הזה; כך משיגים גובלינים כרשתות צפופות של חדרים צפופים עם בוץ, ומקדשי זקיף כארמונות גבישיים של חדרים עגולים וצורת צלב. לפעמים מכונה תייצר פריט כמו מפתח ותעביר אותו למכונה אחרת כדי לאמץ את הפריט; כך אתה מקבל דלתות נעולות כשהמפתח נשמר על ידי מלכודת במקום אחר במפלס. לפעמים המכונה שמחזיקה את המפתח נשמרת על ידי דלת נעולה משלה, והמפתח של הדלת הזו נמצא במקום אחר -- אין גבול לכמה שכבות קינון מותרות, והתקווה היא שחדרים מקוננים ישאילו סוג של עקביות נרטיבית לרמה באמצעות אתגרים שלובים. המשחק עוקב אחר חלקים מהרמה שייכים לאילו מכונות, וסוגים מסוימים של הפעלת שטח יפעילו הפעלה במקומות אחרים במכונה; כך הרמת מפתח ממזבח יכולה לגרום לפיד בצד השני של החדר להצית את הדשא בחדר. ארכיטקטורת המכונה היא אוסף של תכונות שנועדו לתרגם ערכים של טבלה להרפתקאות עצמאיות עם ווים כדי לקשר אותם להרפתקאות אחרות.
לאחר בניית המכונות, אנו מניחים את גרמי המדרגות. הקומה העליונה מנסה להתקרב כמה שיותר למיקום המיקום למטה מהקומה שמעל, והקומה התחתונה בוחרת מיקום מסמיך אקראי שנמצא במרחק הגון מהקומה העליונה. מדרגות משמשות אוטומטית כאשר השחקן נכנס אליהן, והן שקועים בקיר כך שאין סיבה אחרת להיכנס אליהן. זה מגביל את מספר המיקומים שבהם הם יכולים להשריץ, אבל הם בדרך כלל מסוגלים להתחבר די קרוב למיקומים ברמות סמוכות.
אחר כך נעשה קצת ניקיון. אם יש פתח אלכסוני בין שני קירות, אנחנו מפילים את אחד הקירות. אם לדלת יש פחות משני קירות צמודים, אנו מפילים את הדלת. אם חומה מוקפת בשטח בלתי עביר דומה משני הצדדים - תחשוב על חומה העוברת באמצע אגם לבה, או על פני תהום - אנחנו מפילים אותה. זה גם המקום שבו נבנים גשרים על פני תהומות שבהן זה הגיוני -- שבו שני הצדדים מתחברים ומקצרים את מרחק הנתיב בין שתי נקודות הקצה באופן משמעותי.
פריטים הם הבאים, מעבר למה שכבר הונח על ידי מכונות. יש טריק חמוד להחליט היכן למקם פריטים. דמיינו לעצמכם הגרלה, שבה כל תא ריק במפה מכניס מספר מסוים של כרטיסים להגרלה. תא מתחיל בכרטיס אחד. על כל דלת שהשחקן צריך לעבור כדי להגיע לתא, החל מהקומה העליונה, התא מקבל עשרה כרטיסים נוספים. על כל דלת סודית שהשחקן צריך לעבור כדי להגיע לתא, התא מקבל תוספת של 3,000 כרטיסים. אם התא נמצא במסדרון או בשטח לא ידידותי, הוא מאבד את כל הכרטיסים שלו. לפני שמציבים פריט, אנו עורכים הגרלה -- כך שמאגרי אוצרות סבירים יותר באזורים מוסתרים היטב, מחוץ לשבילים. כאשר אנו מניחים פריט, אנו לוקחים חלק מהכרטיסים מהאזורים הסמוכים כדי להימנע מלהציב את כל הפריטים בגוש אחד. (שיקוי מזון וכוח הם יוצאי דופן; הם ממוקמים ללא הטיה לחדרים מוסתרים, מכיוון שהם נמדדים בקפידה, והחמצה שלהם יכולה להחזיר את השחקן לאחור באופן משמעותי.) יש גם פריטים נוספים ברמות המוקדמות מאוד, כדי לזרז את נקודה שבה השחקן יכול להתחיל לרקום מבנה.
אחרונים הם המוני מפלצות. הם ממוקמים באופן אקראי ואחיד - אבל לא מול הקומה העליונה, כך שהשחקן לא נקלע למארב בפעם הראשונה שהיא דרכה על הרמה. לפעמים המפלצות נמשכות מרמה עמוקה יותר או מולידה עם מוטציה אקראית כדי לשמור על השחקן על בהונותיה.
וזה מסיים את הרמה!
רבות מההסתברויות לאורך תהליך זה משתנות לפי עומק. הרמות הופכות יותר אורגניות ודמויות למערות ככל שתעמיקו יותר, תתחילו לראות יותר לבה וגופרית, דלתות סודיות הופכות נפוצות יותר, דשא וצמחי מרפא יהפכו נדירים יותר ומלכודות ותצורות גבישים יהפכו תכופות יותר. זה הדרגתי, אבל אם תצליחו לתפוס את הקמע של Yendor ברמה ה-26, ההבדל מורגש במהלך העלייה המהירה.
RPS: עם אילו אתגרים התמודדת כשניסית ליצור את הרמות האלה?
הֲלִיכוֹן:הבעיה הגדולה ביותר היא שקשה למצוא מקרי קצה ביצירת רמות. כשאני מוסיף תכונה חדשה לאלגוריתם יצירת הרמות, אני בדרך כלל חושב על התייחסות לתצורה מסוימת של שטח בצורה מסוימת. אבל המשחק תמיד יחשוב על עוד חמישים תצורות שטח שלא ציפיתי, רובן גורמות לפיצ'ר להיכשל בצורה טראגית כלשהי, וחלקן יהיו נדירות ביותר. וזה שדמות מבטיחה נתקעת בגלל תקלה בדור השטח זו חוויה ממש גרועה. אז אני צריך לבדוק ולתקן את התכונות האלה הרבה.
זו הייתה למעשה המטרה הראשונית של תכונת ה"seed": כדי שאוכל לשחזר באגים נדירים של יצירת רמות כאשר שחקנים חוו אותם. מחוללי מספרים אקראיים פשוט יוצרים רצפים של מספרים שנראים כאוטיים בשימושים רגילים. הם יוצרים את אותו רצף בכל פעם, אלא אם אתה מתחיל את הרצף ממספר זרעים אחר. אז כשמשחק של Brogue מתחיל, ה-RNG זכה ל-Master Seed - כברירת מחדל, השעה ביום. לאחר מכן, הדבר הראשון שהוא עושה הוא למשוך ארבעים מספרים אקראיים מה-RNG ולכתוב אותם ברשימה. כאשר אתה יורד לעומק חדש, המשחק מושך את הערך הבא מרשימת המספרים ומשתמש בו כדי לראות את ה-RNG לפני שהוא מייצר את הרמה. זה אומר שהרמות יהיו בדיוק זהות בכל פעם שאתה משחק מאותו סיד מאסטר. אבל מה שהתחיל כתכונה שנועדה לעזור בשחזור באגים הוא כעת הבסיס של תחרויות זרעים, שבהן חבורה של שחקנים ברחבי העולם מתחילים מאותו זרע ומשווים איך כל אחד מהם הלך בצינוק זהה.
יצירת רמות היא הלב והנשמה של משחק נוכל. יותר מכל דבר אחר, תחושת הסביבה והחידוש המתמשך שלה מגדירים את החוויה. לעצב אותו כדי לייצר חוויות מרגשות זה כמו לבנות מכונה קסומה שיכולה לספר לך סיפורים לנצח. התחלתי לכתוב את Brogue בכך שדמיינתי את סביבת הצינוק המושלמת שתמיד רציתי לשחק בה, ובניתי תחילה את מחולל רמות אב הטיפוס כדי ליצור את החוויה הזו. ברגע שהיו לי סביבות מרגשות שהפצירו בי לחקור אותן, חקירתן הפכה למוטיבציה המתמשכת לבניית שאר המשחק.
RPS: בהתחשב בפרוצדורליות של הרמות, איך אתה מוודא שהמשחק הוגן? האם יש בדיקה לאחר שלב הדור שמאזן דברים כמו שיקויים/אויבים/פריטים כדי לתת את הדעת על שטח קשה או דליל וכו'?
הֲלִיכוֹן:בְּהֶחלֵט! יש המון טריקים קטנים שמתרחשים מאחורי הקלעים כדי להפוך את ברוג להוגן, למרות שהתקדמות הדמות מונעת על ידי פריטים שנוצרו באקראי. שיקוי כוח, שיקוי חיים ומגילות של קסם הם "רצועות גומי" בדורות שלהם כך שאתה מקבל בערך אותו מספר בכל משחק, ובערך באותו קצב. בכל עומק חדש עולה הסתברות הדור שלהם, ובכל פעם שהם נוצרים, הסתברות הדור שלהם שוקעת. התאמת הגודל של הדלתות הללו קובעת עד כמה הרצועה הדוקה. מזון נוצר אפילו ביתר שאת; יש גבול תחתון מוחלט לכמות התזונה שנוצרת על ידי עומק נתון, והוא משריץ בכל פעם שצריך כדי להישאר מעל הגבול הזה. יש גם כספות המאפשרות לשחקן לבחור כל אחד ממספר פריטים חזקים, וסביר מאוד שהכספות האלה יופיעו לפחות פעם אחת בצינוק המוקדם -- כך שזה נדיר מאוד שהמשחק לא מספק מספיק פריטים עבור שחקן מנוסה שירכיב מבנה.
RPS: איך מבטיחים מספיק מגוון מבלי ליצור גיאומטריה שהיא 'שגויה' או אקראית מדי או מלאה מדי פעם בקיצוניות? מה עושה את ההבדל בין מערכת חוקים מחייבת שמייצרת רמות משעממות ללא מגע של מעצב, לעומת חופש בכללים האלה לאקראיות אורגנית ומרגשת?
הֲלִיכוֹן:ובכן, גישה אחת שממנה נמנעתי במיוחד היא הגדרת כל סוג של כספת על רשת. אין רשתות בקבצי הנתונים! במקום זאת, מכונות צריכות להתאים את השטח כפי שהן מוצאות אותו. כל אזור במפלס שיש בו נקודת חנק בודדת יכול להיות מותאם למכונת חדר. זה הפך את מערכת המכונה לקשה הרבה יותר לבנייה, היא דורשת בדיקות ממצות, ולעיתים רחוקות מאוד אפשר למצוא חדרים עם מבנה פגום במקצת (אם כי אף פעם לא בצורה שמונעת התקדמות). אבל אני חושב שזה שווה את הטרחה הנוספת, כי כספות שנוצרו באופן פרוצדורלי מרגישות אורגניות יותר ומציעות יותר פוטנציאל להפתעות מעניינות.
RPS: האם גרפיקת ASCII מגבילה או משחררת בכל הנוגע ליצירת פרוצדורליים? Brogue יפה בצורה יוצאת דופן למשחק ASCII.
הֲלִיכוֹן:הם אמנם מגבילים במובן זה שאתה מקבל רק גליף גופן אחד ושני צבעים לכל ריבוע, מה שמאלץ כמה החלטות עיצוביות קשות כשיש הרבה מידע משני להעביר. אבל הם משחררים במובן זה שהם מעבירים את המיקום והזהות המרחבית של כל תכולת הצינוק בבהירות קריסטלית, ואז משאירים את השאר לדמיון מפותח היטב. לשם כך, Brogue מוצף בטקסט טעם -- יש טקסט טעם לכל מפלצת ופריט, יש שורה שלמה של ממשק המשתמש המוקדש לצמיתות לטקסט טעם, והכל מתאר כל הזמן את מה שאתה רואה, שומע, מריח, מרגיש ותטעמו כשאתם משוטטים במבוכים. אתה לא יכול לברוח מזה! מנוע תאורה דינמי בצבע מלא גם עושה כאן כמה משימות כבדות כדי לגרום למדורות להבעיר ולגרום לחלקי פטריות זוהרות לנצנץ. משחק מאתגר מושך אותך כדי לייעל את האסטרטגיה שלך, אבל ברוג מנסה מאוד לשכנע אותך לראות בצינוק שלו מקום ולא מערכת משוואות.
RPS: תודה על הזמן שהקדשת.
למידע נוסף על מה שעושה את ברוג נהדר, קרא את שלנוסיפור השתייה לקראת פרמדאת'באמצעות מבחר שיקויים מסתוריים של המשחק.
פוסט זה התאפשר על ידי התוכנית התמיכה של RPS. תודה לכל התומכים באתר!