אױטפּאָסט 2 דאַטאַ פאָרמאַטן · bei.pm

דער טעקסט איז אוטומאַטיש איבערגעזetzt געווארן דורך OpenAI GPT-4o Mini

די פֿאָרמאַטן וואָס זענען באַשריבן אויף דער זייַט באשטימט זיך אויף טעכנישע אַנאַליזע פון אינטעלעקטואַלער פּראָפּערטי פֿון Dynamix, Inc. און Sierra Entertainment.
די אינטעלעקטואַלער פּראָפּערטי איז הײַנט טייל פון דער Activision Publishing, Inc.- / Activision Blizzard, Inc.-מאַסע און איז איצט אין דער האַנט פֿון Microsoft Corp..

די אינפֿאָרמאַציע איז געקליבן דורך רעווערז אינזשיניריע און דאַטאַנאַליזע צו צילן פון אַרכיווירן און אינטעראָפּעראַטיוויטעט מיט געשיכטע דאַטן.
עס זענען נישט געניצט געווארן קיין פּראָפּרייטאַר אָדער פאַרטרייט специפֿיקאַציעס.

דער שפּיל קען הייַנט זיך ערקויפן אויף gog.com ווי אַ אַראָפּנעמען.

קונצפע פון דעם שפּיל

די קומענדיגע אַרטיקל סעריע דוקומענטירט מיינע ערkenntניסן וועגן די דאטן פארמאטן אין דעם רעגירונג-סטראַטעגיע שפּיל "אוטפּאָסט 2: פאַרשפּרייטע גורל", וואס איז איבערגעגעבן געווארן אין 1997 דורך סיערה און אַנטוויקלט געווארן דורך דינאַמיקס.

איך האָב זיך וועגן דעם 01. נאָוועמבער 2015 ביז 14. נאָוועמבער 2015 געקוקט צו דער אַנאַליזע פון די דאטן פון דעם שפּיל - און וואָס מען קען דערמיט מאַכן.

Laut די אינפֿאָרמאַציע, וואָס איך קען ביז איצט באַקומען, האָט דינאַמיקס - ווי אַזוי פילע קאָמערציום פירמעס - געשטעלט עטלעכע דאטן פארמאטן נישט ספּעציפיש פֿאַר אוטפּאָסט 2, אלא אויך געניצט אין אנדערע אַנטוויקלונגען ווי למשל די מעכוואָריער סעריע (געבייַטן).
אויף יעדער פאַל, קען מען אויך באַשטעטיקן, אַז די אינאַוויישאַן קראַפט פון די דאטן פארמאטן איז למעשה אין גרענעצן און אָפט אויפֿgebaut אויף לאַנג-שטענדיקע קאָנצעפּטן פון געוויינטלעכע פארמאטן ווי JFIF און RIFF.

פֿאַר דער אינטערפּריטאַציע פון די טאַבלעטן און דאטן פארמאטן זענען נאָך אינפֿאָרמאַציע אונטער וואס איזוואס? בנימצא.
די דאָ צוגעגעבן דאטן זענען בכלל ווי אַ ליטלענדיאַן צו פֿאַרשטיין.

אויף דער סוף קען מען זאָגן, אַז די רעווערז אינזשיניריע האָט געבראכט זייער פיל שפּאַס, אויך אויב עס איז נישט גאָר קומפּליט.
נאַטירלעך קען איך אויך נאָר רעקאָמענדירן, צו שפּילן דעם שפּיל זיך, ווי עס צושטעלט אינטערעסאַנטע שפּיל מיכאַניק.

אײַנפֿירונג

די דאַטן פֿאָרמאַטן וואָס ווערן געניצט דורך Outpost 2 האָבן אַ מבנה וואָס רעמינדערט אויף JFIF / PNG - די איינצעלענע דאַטן בלאַקס האָבן שטענדיק אַן 8 באַייט קאָפּ. דאָך פֿאַר זיך, איך שפּאַר זיך צו דאָוקמענטירן די איינצעלע קאָפּן אין די entsprekhende ספּעציפישע ערטער און דאָוקמענטירן נאָר די אָפּשטיצונגען.

די פֿאָרmaat איז שטענדיק די זעלבע; די אמתע נוץ דאַטן זענען דאָרט אין באַשטימט.

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאַגישע בייטס

איז עס איז אינפֿאָרמאַציע וועגן וואס צו ערוואַרטן אין דעם ווייַטערן דאַטאַבלאק.

באקאנטע ערטער:

  • 0x204C4F56 ('VOL '):
    ווליום
  • 0x686C6F76 ('VOLH'):
    ווליום-העדער
  • 0x736C6F76 ('VOLS'):
    ווליום-שטרענג
  • 0x696C6F76 ('VOLI'):
    ווליום-אינפֿאָרמאַציע
  • 0x4B4C4256 ('BLCK'):
    ווליום-בלאָק
  • 0x504D4250 ('PBMP'):
    גראַפיקדאַטן
  • 0x4C415050 ('PPAL'):
    פֿאַרבפּאַלעטע
  • 0x4C415043 ('CPAL'):
    פֿאַרבפּאַלעטן-קאָנאַטיינער
  • 0x64616568 ('head'):
    העדער
  • 0x61746164 ('data'):
    נוץ-דאַטן
0x0004 uint(24) בלאק-לענג

איז עס איז אינפֿאָרמאַציע וועגן ווי גרויס (אין בייט) דער ווייַטער דאַטן בלאָק איז.

דאָס איז דאַטן וואָס זענען בלויז די רעינער ניצל דאַטן - די 8 האַדער בייט זענען נישט פאַראַנען.

0x0007 uint(8) פֿלאַגן?

עס איז אומבאַקאַנט, וויאזוי דער בלאָק גיט זיך צו.

אין די וועולומען איז דער ווערט אָפט 0x80, אין אַנדערע פיילער אָפט 0x00. דאס לייגט דערפון צו, אז עס איז א פלעג-שטעל.

וואַַלומען

די וואַלומענס זענען אַ דאַטאַ קאָנטיינער פֿאַר דאָס שפּיל, ענליך צו אַן אַרכיוו פֿאָרמאַט ווי, צו ביישפּיל, טאַרבאָל. לפּחות אין אויספּאָסט 2, דער פֿאָרמאַט קען בלויז האָבן פֿײַלע - נישט ערטער. מן סביר קען מען זיי אָבער דורך באַשטימטע פֿײַלע נאָמען סימולירן.

אַ וואַלום באַשטייט פון דער וואַלום-העדער און פֿון מערערע וואַלום בלאָקען, וואָס entsprechnung צו די קאָנקרעטע פֿײַלע.

"וולומען" זענען די פֿײַלעס מיט דער ענדונג 'vol' אין דער שפּילדיקערדיק.

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) בלאָק-לענג
0x0007 uint(8) פֿלאַגס

וועלום היֵדאַר

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) בלאָק-לענג
0x0007 uint(8) פֿלאַגס

דער װאָליום-העדער אַנטהאַלט נישט קיין נוץ-דאַטאַ.
ער דערוויילט בלויז ווי אַ קאָנטיינער.

אַז דער ערשטער דאַטום אין װאָליום-העדער זאָל זײַן די װאָליום-שטרינגס; נאָכדעם קומט די װאָליום-אינפֿאָרמאַציע.

ווליום סטרינגs

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) בלאָק-לענג
0x0007 uint(8) פֿלאַגס
אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) בלאָק-לענג
0x0007 uint(8) פֿלאַגס
0x0008 uint(32) פּײלאָד-לענגע

געב אײַנ דורך ווי פיל בײַטס פֿון די נאָכפֿאָלגנדיגע דאַטן זענען באמת נוץ דאַטן.

די רעשטיקע, איבערבליבענע דאַטן פֿון די װאָליום-שטרונגען-ליסטע זענען אָבער אויס ווי גאַרבידזש צו ערקלערן.

אין פֿיילער מיט שפּעטערן דאטן זענען די 'איבערבליבענע דאַטן' 0x00, וואָס קען דאַווען אויף אומלעבנסדיקייטן מיט דער טולציין בעת דער אַנטוויקלונג פֿון דעם שפּיל, צו זאָגן, אַז האָט זיך ערשט זייער שפּעטער אַ אַנטוויקלער געקענט וועגן די קורעקטע יניטיאַליזאַציע פֿון די בופערס, ווייל עס האט נישט קיין השפּעה אויף דעם שפּיל אויב די דאַטן זענען יניטיאַליזירט אָדער נישט.

0x000c uint(8)[] דאַטאַינאַמען-ליסטע

דאָ איז אַ 0-בייט-טערמינירטע רשימה פון פֿיילנאַמען, וואָס - און דערצו אין דעם דאַטע-באַשטאַנד - נאָר ASCII-שילדער וואַרטן.

עס איז נישט נויטיק צו פֿאַרשטיין דעם דאַטע בלאָק מער אין פּאַרסינג, ווייַל אין די וואָלום-אינפֿאָרמאַציע איז שוין דירעקט צו די אָפּפֿלאָסן פון די פֿיילנאַמען.reference

די וואַוליום סטרינגס זענען אַ רשימה פון טעקסט-נאַמען, וואָס זענען אינערהאלב פון דעם וואַוליום אין געשטעלט.

וואָליום אינפֿאָרמאַציע

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) בלאָק-לענג
0x0007 uint(8) פֿלאַגס

די וואַַליום-אינפֿאָרמאַציען נעמען מער דעטאַלירטע אינפֿאָרמאַציען וועגן די טייַל. דאָס איז אין אַ באַשטימט וועג אַ מין פון FAT-דעקלערונג (FAT = File Allocation Table)

די צאָל פון טייַל געפֿינט זיך פֿון דער בלאק גרייס געהאַלטן דורך די לאנג פון די דעקלערונגען - 14 בייט.

די איינצעלע דעקלערונגען האָבן יעדער דעם נאָכפֿאָלגנדיקן אויפבאַוועג:

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) דאַטעינאַמען-אָפפשט

געבט אויף, אויף וועלכן אָפּפֿאַר (!), אין דער רשימה פון דאַטע נאָמען (וואַליום-שטרינגס) געפֿינט זיך דער דאָקומענט נאָמען.

עס רעפערירט זיך צו דעם אָנהייב פון דעם נוטצנדיקן דאַטן בלאָק.

0x0004 uint(32) טעפֿל-אָפֿסעט

צייט אויף וועלכן אָפּפֿאַל אינדערהאַלט פון דער גאנצער וואָלום-פֿילע געפֿינט זיך די פֿילע.

0x0008 uint(32) טעיפ-גראסער

געב אַ נאָמען ווי גרויס די טייַל אינעם בייט איז.

0x000c uint(16) פֿלאַגס?

געט אויס צו געבן מער אינפֿאָרמאַציע וועגן דער פֿייל קאָדירונג.

  • 0x03 איז געגרייט, ווען די פֿייל איז קאָמפאַקט. דאָ קומט וואָס אַ האַפֿמאַן באָם איז אין נוצן.
  • 0x80 איז דערהייַנטיקט אין אַלע פאַלן.

וואָליום בלאָק

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) בלאָק-לענג
0x0007 uint(8) פֿלאַגס

ביי אַ וואַליום-בלאָק איז עס אַ קאָנטיינער, דער נעמט טייַלען אַרײַן. ער ווערט נאָר נאָך אַמאָל - אויף די בלאָק-פֿאָרמאַט - ראַדונאַנט די טייַל גרייס און נאָך דעם פאַרלויפן גלייך די נוץ-דאַטאַ.

Tiles

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 50 42 4d 50 -- -- -- -- -- -- -- -- -- -- -- -- P B M P . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) בלאָק-לענג
0x0007 uint(8) פֿלאַגס

די טיילז זענען אײַנגעפֿירט אין אַ ספּעציפֿישן Bitmap גראַפיק Format פֿאַר Outpost-2. זיי פאַרשטעקן זיך איבער 13 טיילזאַץ, וואָס מען רופט "וועלז" (well0000.bmp ביז well0012.bmp), וואָס געפינען זיך אין דעם וועכיקייט maps.vol.

אין דעם שטח האָבן די טיילזאַץ / וועלז די ווייַטערדיקע אינפֿאָרמאַציע:

פֿילע נאָמען אין האַלטן
well0000.bmp אַ 32x32px גרויס, בלוי גראַפיק - אידיאַל צו טעסטן אויב דער אייגענער אימאַדזש-לאָודער ארבעט
well0001.bmp אַנטהאַלט היליכע שטיינער, בערג אויף היליכן שטיין און אומצ zahlיקע ווערסיעס פון ערדזש-קראַטער אין היליכן שטיין
well0002.bmp אַנטהאַלט היליכן-שטיין-'דודאַדז' - אויך עלעמענטן, וואָס קענען ווערן געשטעלט צו פֿאַרלאָזן ( אָדער געוויסן ווי סטרוקטור, ווי למשל וואַנטן) אויף היליכן שטיין, אַרייַנגערעכנט אויך פאַבריק
well0003.bmp אַנטהאַלט אַ קראַסטע-אַרטיקע סטרוקטור אויף היליכן שטיין
well0004.bmp אַנטהאַלט דאנקלט שטיין, בערג אויף דאנקלע שטיין און אומצ zahlיקע ווערסיעס פון ערדזש-קראַטער אין דאנקלע שטיין
well0005.bmp אַנטהאַלט דאנקלע-שטיין-'דודאַדז' - אויך עלעמענטן, וואָס קענען ווערן געשטעלט צו פֿאַרלאָזן ( אָדער געוויסן ווי סטרוקטור, ווי למשל וואַנטן) אויף דאנקלע שטיין
well0006.bmp אַנטהאַלט אַ קראַסטע-אַרטיקע סטרוקטור אויף דאנקלע שטיין, ווי אויך איבערגאַנגען צווישן היליכן און דאנקלע שטיין
well0007.bmp אַנטהאַלט לאַוואַ כולל יעדער 4-5 פֿריימס אַנימאַציע פון דער זעלביקער
well0008.bmp אַנטהאַלט זאַנד און אומצ zahlיקע ווערסיעס פון ערדזש-קראַטער אין זאַנד
well0009.bmp אַנטהאַלט זאַנד-'דודאַדז' - אויך עלעמענטן, וואָס קענען ווערן געשטעלט צו פֿאַרלאָזן ( אָדער געוויסן ווי סטרוקטור, ווי למשל וואַנטן) אויף זאַנד
well0010.bmp אַנטהאַלט 48 איבערגאַנגען פון זאַנד צו היליכן און דאנקלע שטיין
well0011.bmp אַנטהאַלט די פּאָלאַר-קאַפּן פון דער מאַפּע, מיט דאנקלע שטיין ווי אונטערגרונט
well0012.bmp אַנטהאַלט די פּאָלאַר-קאַפּן פון דער מאַפּע, מיט היליכן שטיין ווי אונטערגרונט

עס איז ראציאָנאַל צו נעמען פאר א גענוי אויספירונג, צו נישט רענדערן די טילס אין דער פאראויס צו קעשן זיי, ווייל די דאטן פֿאַר דעם טאָג/נאַכט ציקל מוזן נאך באאַרבעטן ווערן - און עס וועט ווערן זייער זייער פילע דאטן.

די טילס זענען 8bpp גראַפיקס מיט אינדעקסירטער פּאַלעטע פון 32x32 פּיקסעל רעזאָלוציע, וואָס זענען אָנגעשטעלט צו איין אנדערן. אין אַ אַזוי געשאַפֿענע טילסעט קען אָבער געפֿינען זיך פילע מער

דער הויפּט קאָנטיינער besteht פֿון 2 סעקסיעס: head און data.

טיילז קאָפּ

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) בלאָק-לענג
0x0007 uint(8) פֿלאַגס
0x0008 uint(32) ווערסיע / פֿלאַגס?

דער דאָ קען זיין אַ ווערסיע צייכן פון דער דאַטע פֿאָרמאַט; אין אַלע מײַנע פֿיילן איז דאָ געשטאנען דער ווערט 0x02

0x000c uint(32) ברייטע (האָריזאַנטאַלער אָפּשטימונג)

געב אן ווי BREIT די בילדדעיט איז (אין פּיקסעל).

ביי אַלע וואָלס פון אוטפּאָוסט 2 וועט דאָ זיין דער ווערט 0x20 אָדער 32 צו דערוואַרטן.

0x0010 uint(32) הויכן (ווערטיקאַלע אָפּשטימונג)

געב אַן ווי הויך די בילדערפֿאַל איז (אין פּיקסעל).

בײַ אַלע וואַלעס פון אַוטפּאָסט 2 וועט דאָ דער ווערט 0x20 אָדער 32 צו דערוואַרטן זײַן.

0x0014 uint(32) פֿאַרב טיף?

די באַדייטונג פון דעם ווערט איז אומבעקענט.

זען איז אין אלע געפּראַוועטע טייפּן וואָרט 8, קען עס זיין אַ פארב טיפן באַשרייַבונג.

0x0018 uint(32) פארב טיף 2?

די משמעות פון דעם ערך איז אומבאַקאַנט.

אויב קען זיין, אַז עס איז אַ 'ציל'-פאַרב טיפקייט.

נאך די אינפֿאָרמאַציע גיט מען נאָך אַ אין שטאַנדאַרדיזירטן RIFF-פֿאָרמאַט געפֿינען פּאַלעטטע-פֿײַלע. די גענויע ספּעציפיקאַציע געפינט זיך - ווײַל די פּאַלעטטן זענען אויך אַנדערש ערגעץ - אונטער פּאַלעטטען.

טיילס דאטן

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) בלאָק-לענג
0x0007 uint(8) פֿלאַגס

פֿאַרשטייטלעך קומען שוין די ערשטע פּיקסעל דאַטן, פון לינקס-אויף שורות-ווייַז צו רעכט- unten.
די דאַטן ווערט ביי די אונטערגעוואָרפֿענע גראַפיקס וואָס זענען פאַקטיש 8bpp-ביטמאַפּס, entspricht דעם אינדעקס פון דער פאַרב אין דער פאַרב פּאַלעטע.

פּיקסעל דאַטן אָנהייבן אויבן לינקס און ענדיגן unten רעכט.

די שפּיל-Engine צייכנט די טTiles *שייַכות* אויף-דער-פֿרעג.
דאס נראה איז אונטער אַנדערע דאָס טאָג-נאַכט-ציקל געזשולטן צו זיין, וואָס האט 32 אָפּשטופונגען פון einzelner טTiles. דורך דעם ווערט offensichtlich פון דעם ליכטיקייט-ווערט 'א ביסל' אָפּגעשטעלט. גענויע ערנונגען קען מען נאָך נישט פאַרשטיין, איך ארבעט אויף דער רעכענונגס-גרונדלייג

v *= (daylight / 48) + 0.25;

מיט די HSV-דאטע פון ​​די פיקסעלס, ווען daylight איז א ווארט פון 0-31 און v איז א ווארט צווישן 0-1. דאַריבער hinaus איז צו באַטראַכטן, אַז אויף דער מאַפּע איז יעדער מאל נאָך א גרענעץ פון 16 טTiles נאַכדיק פֿאַרלאַנג און רעכט (דאָס איז פֿאַר די אומזעיקע ספּאַוון פון אייניטן) עקזיסטירט.

צירק צו מאָדערניזירן, דער טאָג-נאַכט-ציקל אויף יעדער גיים-ציקל aktualisiert בלויז איין קאָלאִָר פון דער מאַפּע.
א באַשנידערטער טאָג-נאַכט-ציקל נראה ווי פאלגענד:

ויזועליזירונג פון דעם טאָג-נאַכט-ציקל

פּרט

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 43 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- C P A L . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגיש בײַטס
0x0004 uint(24) פּאַלעטן-לענג

געב, קעגן דעם נאָרמאַלן בלאָקפֿאָרמאַט, די נומער פון פּאַלעטטן וואָס זענען צו געפֿינען אין דער דאָקומענט - נישט די לענג פון דעם בלאָק אין בייט.

0x0007 uint(8) פֿלאַגען

געוואלדיג, ווי געוויינטלעך, פֿלאַגעס.

מיר זענען אָבער נישט באַוווסט קיין פֿלאַגעס; ווײַל אַלע מיר באַוווסטע ווערטן 0x00 זענען, וואָלט עס אויך קען זיין, אַז די פּאַלעט-אַנצאָל פשוט איז אַ uint(32).

פאר וואס PRT איז גענוי איז מיר נישט באַוווסט; אפשר איז 'Palette and Ressource Table' - ווייַל דאָס איז אַ דאָקומענט - געפֿונען ווי op2_art.prt אין דער maps.vol - וואָס איז אַ סיי, אָדער דאָס וואָלט גוט באַשרייַבן די פֿונקציע.

די דאָקומענט אַנטהאַלט אַ ליסטע פון פּאַלאַץ, אַ טבלה איבער אַלע גענוצטע ביטמאַפּס, אַלע אַנימאַציע-דערפֿינונגען און נאָך אַ סעריע פון אומבאַוווסטע דאטן. זי נאָכגייט די בישן קאָנטיינער-פֿאָרמען לוס, ווי נישט אַלע דאַטאַסעץ נאָכגיין דעם שאָך.

די CPAL-סעקציע (שטייט מסתּמא פֿאַר פּאַלאַץ-קאָנטיינער) פֿאַרמיטל בלויז די פּאַלעטע דאטן, דורך צו צייגן ווי פילע פון די נאָרמאַל 1052 בייט גרויס 8-ביט פּאַלאַץ זענען פאַרהאַלטן.

די 1052-בייט-אונגערופ איז נישט געמיינט צו זיין פֿאַרבונדען, ווייַל דער פּאַלעטן-פֿאָרמיט קען פּאָטענציעל האָבן פֿאַרשידענע פּאַלעט גרייסן. זי גיט בלויז פֿאַר דעם דאַטע-שטאַם, וואָס איז צוגעשטעלט מיט Outpost 2.

נאָך די פּאַלעטן-ליסטן קומט פאַרשטענדלעך און אָן אַן אַפענגיק האַדער, שוין די ליסטע פון ביטמאַפּס; ווי אַזוי אויך קומט נאָך די אַנימאַציע-ליסטן.
ביידע ווערן שוין אינעם uint(32) (אָדער ווידער uint24+uint8 פֿלאַגן?) איניצירט, וואָס אנטהאַלט די צאָל פון דאַטאַסעץ.

פּאַלעטטען

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 50 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- P P A L . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) פּאַלעטן-לענג

גיט, קעגן דעם נאָרמאַלן בלאָקפֿאָרמאַט, די נומער פון פּאַלעטעס וואָס צו געפֿינען אין דעם טעקסט - נישט די לאנגע פון דעם בלאָק אין בייטס.

0x0007 uint(8) פֿלאַגס

אויפן ערש, ווי געוויינטלעך, פלעגס.

מיר זענען אבער נישט באַוווסט קיין פלעגס; זינט אלע מיר באַוווסטע ווערטן 0x00 ענטפֿערן, וואָלט עס אויך אפשר געווען צו באַטראַכטן, אַז די פּאַלעטן-צאָל איז פשוט אַ uint(32).

די פּאַלעט-אינפֿאָרמאַציען זענען זייער פשוט צו לייענען.
Sי זענען באַשטאַנדיק פֿון אַ העדער און אַ דאַטן-סעגמענט.

פּאַלעטן-העדער

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) פּאַלעטן-לענג

גיט, קעגן דעם נאָרמאַלן בלאָקפֿאָרמאַט, די נומער פון פּאַלעטעס וואָס צו געפֿינען אין דעם טעקסט - נישט די לאנגע פון דעם בלאָק אין בייטס.

0x0007 uint(8) פֿלאַגס

אויפן ערש, ווי געוויינטלעך, פלעגס.

מיר זענען אבער נישט באַוווסט קיין פלעגס; זינט אלע מיר באַוווסטע ווערטן 0x00 ענטפֿערן, וואָלט עס אויך אפשר געווען צו באַטראַכטן, אַז די פּאַלעטן-צאָל איז פשוט אַ uint(32).

0x0008 uint(32) פּאַלעט-פֿאָרמאַט-ווערסיע?

דער בעלבוס קען מסתבר באַשטימען וועלכע פּאַלעטן-פֿאָרמאַט-ווערסיע די פּאַלעטע נאָכגייט.

אלע Outpost2-פּאַלעטן שייַנען צו האָבן ווערסיע 0x01.

פּאַלעטן-דאַטן

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) מאגישע בייטס
0x0004 uint(24) בלוק-לענג
0x0007 uint(8) פֿלאַגס

די דאטן סעקשאַן נעמט די איינצעלע פּאַלעטטען-אײַנטראָג. די צאָל פון פּאַלעטטען-אײַנטראָג איז באשטימט דורך די בלאָק לענג / 4.

די איינצעלע אײַנטראָג האָבן די פאלגענדע, פשוטe אויפבויען;

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(8) רויט-קאָמפּאָנענט

געבט דעם רויט-שמידל פון דער פארבן

0x0001 uint(8) גרין-קאָמפּאָנענט

געב די גרין-חלק פון דער פארב

0x0002 uint(8) בלוי-קאָמפּאָנענט

געב את בלוי-פֿאַרב פון דער קאָליר אָנ

0x0003 uint(8) אינבעקאַנט - פאלגן?

עס איז אומקלאר, וואס דער ווערד מיינט, ווייַל ער איז scheinbar פון גרונט 0x04.

צו די פּאַליטאַנז איז אַנדערש נאָר צו זאָגן, דאָס ביי פּאַליטאַנז צו ווערן געניצט פֿאַר אַנימאַציעס פֿאָלגענדע ריקות געלט:

  • די ערשטע פֿאַרב איז אייביק טראַנספּאַראַנט, פֿאַר אַלע מאָל וואָס פֿאַר אַ ערשטע איז געגעבן.
  • די פּאַליטאַן-אײַנטראָג 1-24 זענען אין די פּאַליטאַן 1-8 ווי שפּילער פֿאַרב צו ווערטענען.
    ווו די פֿאַרבן פֿון שפּילער 1 איידער קומען, איז מיר אומקלאָר.
    איך פאַרשטיי, אַז די אַנדערע פֿאַרבן זענען געהאַרדקאָדעט.

פּאַליטאַן-רעפֿערענץ

ביטמאפּס

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) אונטערשניטענע ברייט

געבט דער ברייט פון די פּיקסעל דאַטע ליניעס אין בעט - ווייל זיי זענען צוגעשטעלט צו די 4-בעטן גרענעצן.

אַזוי איז עס שנעל מעגלעך צו אָנשרייבן אַ באַשטימט בילד ליניע.

פארוואס דער ווערט איז פֿאַרשיידן איינגעשטלאן, טראָץ דעם וואָס ער קען ווערן רעכענען, איז אומקלאר.
אפשר איז עס אַן אָפּטימיזאַציע פֿאַר דעם רענדער קאָד.

0x0004 uint(32) אױפֿשטעלן

געבט דעם אָפּפֿאַר פֿון דער ערשטער שורה אין דער ביטמאַפּ

0x0008 uint(32) הייך

גיט די הוידע פון דעם בילד אין פּיקסעל

0x000c uint(32) ברייטע

געב די ברייט פון דעם בילד אין פיקסעל

0x0010 uint(16) טיפּ

גיט די ארט פון דעם בילד. דאָ נראה עס צו זיין אַ ביטמסקע:

  • 0x04 איז געשטעלט, ווען עס איז אַ 1bpp-גראַפיק.
  • 0x40 איז געשטעלט, ווען עס איז אַ גראַפיק, וואָס דאַרף פאַרגרעסערן ווינדאָוז.
0x0012 uint(16) פּאַלעטע

דערקלערט, וועלכע פּאַלעטע פון דער PRT-פֿאַיל זאל געניצט ווערן

די דאַטן סטרוקטור פון דער PRT-פֿייל איז ווי עס איז באַשטימט ווי די פֿאַר די ספּרייטס גענוצטע ביטמאַפּס זענען געבויט. די ביטמאַפּס באַדייטן איינלעכדיקן טייל, פון וועלכן פילע וועלן זיין צוזאַמגענומען צו אַ אַנימאַציע פֿריימע פון אַ ספּרייט.

די באַשטימטע בילד דאַטן פאַרברענגען זיך אין דער op2_art.BMP אין דער שפּיל דירעקטאָרי.
פארוואס די ביטמאַפּ פֿייל האט אַ (מערסטנס קאָרעקט) RIFF-ביטמאַפּ-העדער, איז אומקלאר. מסתמא ניצט Outpost 2 סיסטעם-APIs צו לאָאַדן די גראַפיקס, דורך צוגעבן דעם העדער טעמפּאָראַר און איבערשרײַבן די entsprechenden, פאַרשיידענע פֿעלדער.

די פּיקסעל דאַטן זענען אין דער BMP-פֿייל אויף די פּאָזיציע אָפֿפסט + דעם uint32-אָפֿפסט, וואָס איז צו געפֿינען אין דער BMP-פֿייל אויף אַדרעס 0x000A (RIFF-ביטמאַפּ-דאַטן אָפֿפסט), צו געפֿינען - און זענען ווידער די שורות-ווייַזיקע אָנאָרדענונג פון אויבן לינקס צו רעכט unten.

מאָנאָכאָעם 1bpp-גראַפיקס קענען ווערן אַזוי געצייכנט, אַז פֿאַרב 0 איז גאַנץ טראַנספּעראַנט, ווי אויך פֿאַרב 1 איז אַ האַלב-טראַנספּעראַנט שוואַרץ/גרוי, ווי די מאָנאָכאָעם גראַפיקס זענען געוויינטלעך פֿאַר פֿאַראן- און בנין-שאָטטן אין די אַנימאַציעס.

דאָmit קען מען שוין פילע גראַפיקס צונעמען.

געשיצט וואוינמאָדול (פלעימוט)

אַנימאַציען

יעצט קומען מיר צו דער קעניגס קלאַס פון דיסציפּלינען אין דעם Outpost 2 דאַטן פֿאָרמאַט:
די אַנימאַציעס.

די אַנימאַציע רשימעס ווערן געפֿירט דורך אַ גלאבאַלע קאָפּ, וואָס דינט בעיקר צו דאַטן ועריפאַקאַציע. דערנאָך קומען די באַשטימטע אַנימאַציע דיפיניציעס, וואָס פֿאַרשיידן זיך אין 3 שטאַפּלען:

  1. אַנימאַציע
    אַ אַנימאַציע איז די אויבערשטע אינסטאַנץ; זי שטעלט אַן אַנימאַציע פון אַ איינהייט, אַ בנין אָדער אַן 'פּאַרטיקל-אַנימאַציע' (קאָמאַטשנשלאג, וועטער, עקספּלאָוזיע) אין אַ באַשטימט אויסגאַנג שטאַנד.
  2. פֿריימע
    אַ פֿריימע איז אַן איינציקע בילד אין אַ אַנימאַציע. אַ אַנימאַציע קען האָבן איין אָדער מער פֿריימעס.
  3. סובפֿריימע
    אַ סובפֿריימע איז די אינפֿאָרמאַציע וועגן וואָס אַ באַשטימטע באַיטמאַפּ איז אונטער באַשטימטע קריטעריעס צו אַ באַשטימט ערשטעלונג פון אַ פֿריימע צוגעשיקט. אַ פֿריימע קען האָבן איין אָדער מער סובפֿריימעס.

דערנאָך קומען שוין גערעכט די אינדיווידועלן אַנימאַציע דיפיניציעס.

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) צְאָל חֶרָקְסָן

ווי פילע אַנימאַציע דאַטאַסעץ זענען דאָ

0x0004 uint(32) איינער צאָל פֿראַמעס

ווייל פילע פֿריימס זאָלן זיין אינגאַנצן

0x0008 uint(32) אַנצאָל סאַבפֿריימס

וויווידע סובפֿריימס זאָלן אין גאַנץ זײַן

0x000c uint(32) אַנצאָל אָפּציעלע איינטראָגן

וויו פיל "אויפטייליגע איינגעטראָגן" זענען דאָ.

אַנימאַציע

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(32) אונבעקאַנט 1

אונבאַקאַנטע אינפֿאָרמאַציען

0x0004 uint(32) באַונדינג באָקס: לינקס

גיט דער לינקער אָנפאַנג (אין פּיקסעל) פון דער באַונדינג באָקס.

0x0008 uint(32) באַונדינג באָקס: אובהן

געב צו די אויבערשטע אַנפאַנג (אין פּיקסעל) פון דער באַונדינג באָקס.

0x000c uint(32) באַונדיקן קעסטל: ברייט

געבט די ברייט (אין פּיקסעל) פון דער Bounding Box.

0x0010 uint(32) באַונדינג באָקס: הויכקייט

גיט די הויכע (אין פּיקסל) פון דער באַונדינג באָקס.

0x0014 uint(32) אויףשטעלונג: X

געב די העלפט פון דער אַנימאַציע אויף דער האַריזאָנאַלער ערשט

0x0018 uint(32) אויףֿשטעלונג: י

געב די ווערטיקאַלע מיצל פון דער אַנימאַציע אָפּ

0x001c uint(32) אומבאַקאַנט 2

אונבעקאַנטע אינפֿאָרמאַציע

0x0020 uint(32) איינער צאָל פֿראַמעס

געבט אָן ווי פילע אַנימאַציע פֿריימס זענען אין דער אַנימאַציע אינקלודירט

0x0024 uint(32) אַנצאָל ווינדאָוס

גיט אן, ווי פיל פֿענסטער זענען צו נוצן בעת צייכענען

די דאַטע פון דער אויבערשטער שיכט, דער אַנימאַציע, זענען דאָ בעיקר פאַרוואַלטונג דאַטע - די Boundingbox באַשרייַבט די קאָרדינטען פון די מאַרקעונג אַרום דעם פֿאַראנשט/בויער, ווען דאָס איז אויסגעקליבן און געבט אויך גלייך צו וואָס געגנט איז צו קליקן.

דער אָפֿטשטעקט באַשטימט בעיקר דעם "נולפּונקט"; דעם פונט, וואָס איז צו פֿאַרשטיין אָדער צו אָפּנעמען אויף שפּיל-ינערלעכע קאָרדינטען. מען קען אויך זאָגן אין מאַטעריע: דער אָפֿטשטעקט באַשרייַבט דאָ דעם קאָרדינטן-אָריגין.

ביי די ווינדאָוס איז עס, ווי אויך ביי דעם אָפֿטשטעקט, לאָנדש די (פֿאַר יעדער ווינדאָו) 4 uint(32)-ווערטס, וואָס צייכן אַ געגנט, וואָס פֿאַר Einzelne סובפריימס איז געניץ. אַרויס פון די ווינדאָוס, אויב דאָס איז פֿאַר די ביטמערן entsprechnend, קען נישט געצייכנט ווערן.

פֿראַם

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(8) סובפֿראַמע-אַנצאָל און טאָגאַל פֿאַר אָפּשניט 1, 2

דער ווערט כולל:

  • 0x7F (ביטמסקע): די צאָל פון סובפֿריימס, וואָס ווערן געניצט אין דעם פֿריימ
  • 0x80: די אינפֿאָרמאַציע וועגן אויב אָפּציעל 1 און 2 זענען דאָ
0x0001 uint(8) אונבאַקאַנט 1 און טאָגלע פֿאַר אָפּציענל 3, 4

דער ווערט אנטהאַלט:

  • 0x7F (ביט מאַסקע): אומבאַקאַנט - איך האָב שטאַרק באַשיידן אַז דאָס איז די צאָל גאַמעטיקס וואָס פאַרגאַנגען, ביז דער ווייַטער פֿריימע וועט צוגעשטעלט ווערן
  • 0x80: די אינפֿאָרמאַציע וועגן אויב אָפּציע 3 און 4 זענען דאָ
0x0002 uint(8) אויפֿנעמער 1

נישט באַקאַנט

0x0003 uint(8) אויפֿנעם 2

נישט באַקאַנט

0x0004 uint(8) אויפֿנעמען 3

נישט באַקאַנט

0x0005 uint(8) אויפֿנעמער 4

נישט באַקאַנט

סובפריים

אַדר x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF כאַר
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
אויפֿשטעלונג דאַטענטיפּ נאָמען אויסקלערונג
0x0000 uint(16) ביטמאפּ-אײַדענטיפיקאַציע

באַשטימט, וועלכע ביטמאַפּ פֿאַר דעם סובפראהם זאל געניצט ווערן

0x0002 uint(8) אונבעקאַנט 1

איז אינגאַנצן אומוויסט - איך נעם אָבער שטאַרק אן אַנדערש, אַז עס איז דאָ א רענדער-פּריאָריטעט (Z-לערער).

0x0003 uint(8) סובפֿראַם-איידי

געב ארויס, אין וועלכן סובפריים מיר זענען

0x0004 sint(16) אויפשטעלונג - האָריזאָנטאַל

געב עס אן, וואו אין דעם פֿרעמען דער סובפֿרעם זאָל געשטעלט ווערן, אָדער ווי פילע פּיקסעלס דער באַטמאַפּ וועט האָריזאָנאַל שטעלן ווערן

0x0006 sint(16) אויפשטעלונג - ווערדיקאַל

געב צו, ווו אין דעם פֿרײַם דער סובפֿרײַם זאָל געשטעלט ווערן, אָדער ווי פילע פּיקסעלס די באַטמאַפּ זאל vertical צוריקגעשטעלט ווערן

דאmit קענען מיר איצט איינצעלע פֿריימס, ווי אויך גאַנץ אַנימאַציעס לויטן צוזאַמענשטעלן, דאָ einmal אונטערשייד אין אַ מער קאָמלעקסאַנימאַציע, דער אַנימאַציע מיטן אינדעקס 500, דעמאָנסטרירט

אַנימאַציע 500

אַנימאַציע 500 ווייזט ווי אַ פּלימאָוטה-טראַנספּאָרטער, וואָס איז געלעגט מיט געוויינטלעך ערץ, ווערט אַנטלאָדן. דאָס איז איין פון די פאַרייניקטע אַנימאַציעס, וואָס ניצט די Windowing-פאַנגקשאַנאַליטעט.

און אַזוי קען מען די גאַנץ אַנימאַציע צוזאַמעןשטעלן.
שאָד צו זאָגן, עס איז נאָך אַ פּראָבלעם מיט דער אויבערשטער לאַדלוקע, ווייַל דאָ איז דערentsprechנדיק ביץ אין דער גראַפיק-טיפּ אינפֿאָרמאַציע נישט געשטעלט.

Hיּר זענען נאָך עטלעכע, שיין אַנימירט ספּרייטס פֿון דעם שפּיל:

רענדערינג פון אַנימאַציע 500 אילוסטרירט

אַנימאַציע 500 סוף צוזאַמעןגעשטעלט

Plymouth בניין-פֿאַבריק

Eden ווייכע-פּאָרט

Eden רפואישע צענטער

SCAT

Plymouth ווייכע-פּאָרט

Easteregg:
ווינטער-מאַן

Easteregg:
Dans Dog

נוצער-אינטערפֿאַס

נון פעלט נאָך דעם יוּזער-אינטערפֿייס פון דעם שפּיל, וואָס איז אין אַ געבערשטעטן מעטאַל-לוק געהאַלטן.

אָבער אויך דאָ איז צו באַמערקן, אַז Dynamix האָט נישט געמוזט דערנעכטן דעם רדיאָ; דאָ ווערן נישט נאָר פּשוט די דורך Windows געגעבן User32- און GDI32-APIs געניצט - ספּעציעל ווערט אויך דער רעסורסן-מאַנאַדזשמענט פון User32 געניצט.

די קענען ווערן אַרויסגעשלעפֿן דורך פּראָגראַמען ווי דאָס פון Angus Johnson, וואָס איז געמאכט געוואָרן ווי Freeware, Resource Hacker, אָדער - אויב מען שטרייט זיך אונטער Linux / Mac OS צו נוצן Wine - מיט הילף פון וואָס איז אין icoutils אינגאַנצן wrestool.

טעיפֿל נאָמען אינהאַלט
Outpost2.exe אונטערשיידן בלויז די אייקאָן פון דעם שפּיל, וואָס ווײַזט די וואָלטער-שטאָט פאָר ניו טעררע
op2shres.dll אונטערשיידן נעבן גראַפיקס פֿאַר קאָנטראָלן ווי שטריכן, קנעפּלעך, ראַדיאָ-קנעפּלעך און טשעקבאָקסן אויך דיאלאָג-Hintergründe, די Begleit-Bilder פֿאַר די געשיכטע-מיסיע-טעקסט און די הויפטמעניו-Hintergrundgrafik
out2res.dll אונטערשיידן די אין-גיים פֿענצטער-דעקאָראַציע, אייקאַנז פֿאַר נאָרמאַל און ספּעציאַליטעט מעטאַל, דעם לאָודינג-שטערן, גראַפיקס פֿאַר דיאַלאָגעס ווי אויך אינדערע קורסאָר-גראַפיקס, צירוק צו די אַנימירטע אין שפּיל-דערשיינונג