ב-Online
 
 
 
 
 
 
 
לפרק את הבייט 
הסוף של פקמן 
 
  צילום: Flicker, torley, CC by    
לפרק את הבייט |
 

יום ההולדת ה-30 לגיבור הצהוב הוא הזדמנות מצוינת לספר על הבאג המטורף שבמשחק המקורי. לפרק את הבייט

 
 
 
 
 
 
 
 
 
 
 

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

 
פקמן גרסת גוגל, 2010 (צילומסך: עידו גנדל)
 פקמן גרסת גוגל, 2010 (צילומסך: עידו גנדל) 
 

כל הכבוד, ניצחת

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

 

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

 
 
מסך המוות של פקמן
 מסך המוות של פקמן 
 צילום: youtube.com 
 

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

 

הכל בגלל הפירות

המספר 256 לבדו אמור להקפיץ כל מתכנת. זו התוצאה של שתיים בחזקת שמונה, או מספר הערכים השונים שמשתנה בן 8 ביטים (בייט) מסוגל לייצג. מכיוון שהספירה מתחילה באפס, הערך המקסימלי של בייט הוא 255, ואם מוסיפים לו 1 בלי בקרה מתאימה הוא פשוט חוזר ל-0. כלומר, על סמך מספר השלב הבעייתי לבדו אפשר לשער שהאשם טמון בבייט אחד ספציפי שגלש מעבר לגבול העליון.

 

הניתוח (הטכני מאד ו)המעניין של דון הודג'ס מציג בפרטי פרטים את מקור הבאג. מסתבר שפעולת הציור של המבוך של פקמן, כולל כל הדברים שהוא אוכל, מתבצעת דרך חלוקה של המסך לאזורים גרפיים קבועים מראש, בדומה למסכי הטקסט הישנים. כלומר, במקום לתת הוראה "לצייר דובדבן החל מפיקסל [X, Y]", התוכנה מחלקת את המסך למשהו כמו 40 על 60 אזורים ונותנת לפרוצדורת הציור את ההוראה "לצייר דובדבן באזור [36, 56]". כל אלמנט סטטי במשחק, כפי שמודגם באיור למטה, הוא למעשה תבנית של פיקסלים שמאוחסנת בזכרון ומועתקת בשלמותה לאזור על גבי המסך לפי הצורך.

 

 

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

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

 

כאשר השחקן נכנס לשלב ה-256, שמיוצג על ידי המספר 255 (שוב, בגלל הספירה שמתחילה מ-0), החלק הנ"ל של התוכנה מגדיל אותו באחד כדי לאתר את קבוצת השלבים. לרוע המזל, הגדלה זו חורגת מהגבול העליון והערך שמתקבל הוא 0. התוכנה רואה שזהו מספר נמוך מאד ומסיקה בטעות שהשלב שייך לקבוצת השלבים 1-7. לכן היא מנסה לספור פירות לציור החל מ-1 ועד לשלב הנוכחי. במצב נורמלי, פעולה זו תצייר אחד עד שבעה פירות; במקרה שלנו, לולאה של בייט מ-1 עד 0 פירושה 255 חזרות - או 255 פירות שונים! כמובן שכמות זו חורגת הרחק מטווח הזכרון שמוקדש לגרפיקה של הפירות וחודרת אל גרפיקות ונתונים אחרים לגמרי, שפשוט נשפכים על אזורי המסך בלי אבחנה.

 

כן, אבל למה מימין?

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

 

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


עוד המון מידע על פקמן המקורי אפשר למצוא כאן. יום הולדת שמח!

 

 
 
 
@@@@@@@@@@@@@@@@@@@ ilan @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
@@@@@@@@@@@@@@@@@@@ ilan @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 
תגובות
הוסף תגובה0 תגובות
הוספת תגובה
מאת
 
נושא
 
תוכן
 
 
 
 
תודה! תגובתך התקבלה.
התגובה תתפרסם בכפוף לתנאי האתר.
 
 
 
 
 

כל הזכויות שמורות 2011 © נענע 10 בע"מ
 
 
 
 
כל הזכויות שמורות © Nana10 בע"מ
Video powered by