Outpost 2 Μορφές Αρχείων · bei.pm
Τα φορμά αρχείων που περιγράφονται σε αυτή τη σελίδα βασίζονται στην τεχνική ανάλυση πνευματικής ιδιοκτησίας της Dynamix, Inc. και της Sierra Entertainment.
Η πνευματική ιδιοκτησία ανήκει σήμερα στο σύνολο της Activision Publishing, Inc. / Activision Blizzard, Inc. και είναι αυτή τη στιγμή στην κατοχή της Microsoft Corp..
Οι πληροφορίες συγκεντρώθηκαν μέσω Αντίστροφης Μηχανικής και Ανάλυσης Δεδομένων για σκοπούς αρχειοθέτησης και διαλειτουργικότητας με ιστορικά δεδομένα.
Δεν χρησιμοποιήθηκαν ιδιοσκευές ή εμπιστευτικές προδιαγραφές.
Το παιχνίδι μπορεί να αγοραστεί αυτή τη στιγμή ως λήψη από το gog.com.
Η παρακάτω σειρά άρθρων καταγράφει τις γνώσεις μου σχετικά με τα μορφές δεδομένων στο παιχνίδι στρατηγικής σε πραγματικό χρόνο "Outpost 2: Divided Destiny", το οποίο κυκλοφόρησε το 1997 από την Sierra και αναπτύχθηκε από την Dynamix.
Ασχολήθηκα κυρίως με την ανάλυση των δεδομένων του παιχνιδιού - και τι μπορεί να γίνει με αυτά - από τις 01 Νοεμβρίου 2015 έως τις 14 Νοεμβρίου 2015.
Από τις πληροφορίες που έχω συγκεντρώσει μέχρι στιγμής, η Dynamix - όπως πολλές εμπορικές εταιρείες - δεν ανέπτυξε ορισμένα μορφές δεδομένων ειδικά για το Outpost 2, αλλά χρησιμοποίησε (τροποποιημένα) και σε άλλες εξελίξεις όπως π.χ. στη σειρά Mechwarrior.
Ανεξάρτητα από αυτό, μπορεί επίσης να διαπιστωθεί ότι η καινοτομία των μορφών δεδομένων είναι πρακτικά περιορισμένη και συχνά βασίζεται σε παλαιότερες έννοιες από κοινά μορφές όπως τα JFIF και RIFF.
Για την ερμηνεία των πινάκων και των μορφών δεδομένων διατίθενται περισσότερες πληροφορίες υπό Τι είναι τι;.
Τα δεδομένα που αναφέρονται εδώ κατανοούνται γενικά ως Little Endian.
Τέλος, μπορεί να λεχθεί ότι η αντίστροφη μηχανική ήταν πολύ διασκεδαστική, αν και δεν είναι πλήρης.
Φυσικά, συνιστώ επίσης να παίξετε το παιχνίδι, καθώς προσφέρει ενδιαφέροντες μηχανισμούς παιχνιδιού.
Εισαγωγή
Τα δεδομένα που χρησιμοποιούνται από το Outpost 2 έχουν μια δομή που θυμίζει JFIF / PNG - τα διάφορα μπλοκ δεδομένων διαθέτουν πάντα έναν επικεφαλίδα 8 byte. Γι' αυτό και παραλείπω να τεκμηριώσω τις επιμέρους επικεφαλίδες στα αντίστοιχα συγκεκριμένα σημεία και καταγράφω μόνο τις αποκλίσεις εκεί.
Η μορφή είναι πάντα η εξής; τα πραγματικά χρήσιμα δεδομένα είναι ενσωματωμένα μέσα σε αυτήν:
Διεύθυνση | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | χαρ. | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Απόκλιση | Τύπος Δεδομένων | Ονομασία | Εξήγηση |
---|---|---|---|
0x0000 | uint(32) | Μαγικά Μπάιτς | Περιέχει πληροφορίες σχετικά με το τι να περιμένετε στο επόμενο μπλοκ δεδομένων. Γνωστές τιμές:
|
0x0004 | uint(24) | Μήκος μπλοκ | Περιέχει την πληροφορία σχετικά με το πόσο μεγάλος (σε Byte) είναι ο παρακάτω μπλοκ δεδομένων. Εδώ αναφέρονται μόνο τα καθαρά δεδομένα - τα 8 Byte κεφαλίδας δεν περιλαμβάνονται σε αυτό. |
0x0007 | uint(8) | Σημαίες; | Είναι άγνωστο ποιος είναι ο ακριβής σκοπός αυτού του μπλοκ. Στα volumes, αυτή η τιμή είναι συχνά 0x80, ενώ σε άλλα αρχεία συχνά 0x00. Αυτό υποδηλώνει ότι πρόκειται για ένα σύνολο σημαίων. |
Τόμοι
Τα volumes είναι ένα δοχείο δεδομένων για το παιχνίδι, παρόμοιο με ένα αρχείο αρχειοθέτησης όπως το Tarball. τουλάχιστον στο Outpost 2, η μορφή αυτή περιλαμβάνει μόνο αρχεία - όχι φακέλους. Πιθανώς θα μπορούσαν να προσομοιωθούν αυτοί μέσω κατάλληλων ονομάτων αρχείων.
Ένα volume αποτελείται από την κεφαλίδα του volume καθώς και από πολλαπλά blocks volume, που αντιστοιχούν στα συγκεκριμένα αρχεία.
"Volumes" είναι τα αρχεία με την κατάληξη '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) | Σημαίες |
Η κεφαλίδα όγκου δεν περιέχει καμία χρήσιμη δεδομένα.
Απλώς χρησιμεύει ως κοντέινερ.
Ως πρώτη ημερομηνία στην κεφαλίδα όγκου θα πρέπει να βρίσκονται οι συμβολοσειρές όγκου; ακολουθούν οι πληροφορίες όγκου.
Σχοινιά Όγκου
Διεύθυνση | 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) | Μήκος Payload | Δηλώνει πόσα Bytes από τα παρακάτω δεδομένα είναι πραγματικά χρήσιμα δεδομένα. Τα υπόλοιπα δεδομένα της λίστας Volume-Strings φαίνεται ότι πρέπει να θεωρούνται σκουπίδια. Σε αρχεία με μεταγενέστερη ημερομηνία, αυτά τα 'υπόλοιπα δεδομένα' είναι 0x00, κάτι που θα μπορούσε να υποδηλώνει αδυναμίες με την εργαλειοθήκη κατά την ανάπτυξη του παιχνιδιού, δηλαδή ότι ένας προγραμματιστής ασχολήθηκε με την σωστή αρχικοποίηση των buffers πολύ αργά, καθώς δεν έχει επίδραση στο παιχνίδι το αν τα δεδομένα είναι αρχικοποιημένα ή όχι. |
0x000c | uint(8)[] | Λίστα ονομάτων αρχείων | Αυτή είναι μια λίστα ονομάτων αρχείων τερματισμένη σε 0 bytes, η οποία - τουλάχιστον στο παρόν σύνολο δεδομένων - αναμένεται να περιέχει μόνο χαρακτήρες ASCII. Δεν είναι απαραίτητο να αναλύσουμε αυτό το μπλοκ δεδομένων πιο προσεκτικά κατά την επεξεργασία των δεδομένων, καθώς στις πληροφορίες του τόμου αναφέρονται απευθείας οι offsets των ονομάτων αρχείων. |
Οι Volume Strings είναι μια λίστα από ονόματα αρχείων που περιέχονται μέσα στο volume.
Πληροφορίες Όγκου
Διεύθυνση | 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 = Πίνακας Κατανομής Αρχείων).
Ο αριθμός των αρχείων προκύπτει από το μέγεθος του μπλοκ διαιρεμένο με το μήκος των καταχωρίσεων του καταλόγου - 14 byte.
Οι μεμονωμένες καταχωρίσεις του καταλόγου έχουν την εξής δομή:
Διεύθυνση | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | χαρ. | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Απόκλιση | Τύπος Δεδομένων | Ονομασία | Εξήγηση |
---|---|---|---|
0x0000 | uint(32) | Απόκλιση ονόματος αρχείου | Δηλώνει σε ποιο offset (!) μέσα στη λίστα ονομάτων αρχείων (Volume-Strings) βρίσκεται το όνομα του αρχείου. Αναφέρεται στην αρχή του μπλοκ χρηστικών δεδομένων. |
0x0004 | uint(32) | Αναβάθμιση Αρχείου | Δηλώνει σε ποιο offset μέσα στο συνολικό αρχείο όγκου βρίσκεται το αρχείο. |
0x0008 | uint(32) | Μέγεθος Αρχείου | Δηλώνει πόσο μεγάλη είναι η αρχείο σε byte. |
0x000c | uint(16) | Σημαίες; | Φαίνεται ότι παρέχονται επιπλέον πληροφορίες σχετικά με την κωδικοποίηση αρχείων.
|
Όγκος Μπλόκ
Διεύθυνση | 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) | Σημαίες |
Ένας όγκος-μπλοκ είναι ένα δοχείο που περιέχει αρχεία. Περιλαμβάνει μόνο ξανά - λόγω της μορφής μπλοκ - επικαλύπτει το μέγεθος του αρχείου και αμέσως μετά ακολουθούν άμεσα τα δεδομένα χρήσης.
Πλακάκια
Διεύθυνση | 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) | Μαγικά Bytes | |
0x0004 | uint(24) | Μήκος μπλοκ | |
0x0007 | uint(8) | Σημαίες |
Τα Tiles είναι μια συγκεκριμένη μορφή γραφικών Bitmap για το Outpost-2.
Εκτείνονται σε 13 σύνολα Tiles, που ονομάζονται "wells" (well0000.bmp
έως well0012.bmp
),
τα οποία βρίσκονται εντός του όγκου maps.vol.
Τα σύνολα Tiles / Wells περιλαμβάνουν τα εξής:
Όνομα Αρχείου | Περιεχόμενο |
---|---|
well0000.bmp | Μια μπλε γραφική εικόνα μεγέθους 32x32px - ιδανική για δοκιμή αν ο φορτωτής εικόνας λειτουργεί |
well0001.bmp | Περιέχει ανοιχτόχρωμο βράχο, ορεινές αλυσίδες πάνω σε ανοιχτόχρωμο βράχο και αμέτρητες παραλλαγές κρατήρων πρόσκρουσης σε ανοιχτόχρωμο βράχο |
well0002.bmp | Περιέχει 'Doodads' από ανοιχτόχρωμο βράχο - δηλαδή στοιχεία που μπορούν να τοποθετηθούν για να σπάσουν την ομοιομορφία (ή σκόπιμα ως δομή, όπως π.χ. τοίχοι) σε ανοιχτόχρωμο βράχο, συμπεριλαμβανομένης της βλάστησης |
well0003.bmp | Περιέχει μια κρούστα πάνω σε ανοιχτόχρωμο βράχο |
well0004.bmp | Περιέχει σκούρο βράχο, ορεινές αλυσίδες πάνω σε σκούρο βράχο και αμέτρητες παραλλαγές κρατήρων πρόσκρουσης σε σκούρο βράχο |
well0005.bmp | Περιέχει 'Doodads' από σκούρο βράχο - δηλαδή στοιχεία που μπορούν να τοποθετηθούν για να σπάσουν την ομοιομορφία (ή σκόπιμα ως δομή, όπως π.χ. τοίχοι) σε σκούρο βράχο |
well0006.bmp | Περιέχει μια κρούστα πάνω σε σκούρο βράχο, καθώς και μεταβάσεις μεταξύ ανοιχτόχρωμου και σκούρου βράχου |
well0007.bmp | Περιέχει λάβα, συμπεριλαμβανομένων 4-5 καρέ animation της |
well0008.bmp | Περιέχει άμμο και αμέτρητες παραλλαγές κρατήρων πρόσκρουσης σε άμμο |
well0009.bmp | Περιέχει 'Doodads' από άμμο - δηλαδή στοιχεία που μπορούν να τοποθετηθούν για να σπάσουν την ομοιομορφία (ή σκόπιμα ως δομή, όπως π.χ. τοίχοι) σε άμμο |
well0010.bmp | Περιέχει 48 μεταβάσεις από άμμο σε ανοιχτόχρωμο και σκούρο βράχο |
well0011.bmp | Περιέχει τις πολικές καλύψεις του χάρτη, με σκούρο βράχο ως υπόβαθρο |
well0012.bmp | Περιέχει τις πολικές καλύψεις του χάρτη, με ανοιχτόχρωμο βράχο ως υπόβαθρο |
Είναι σκόπιμο για μια ακριβή εφαρμογή να μην αποδοθούν τα tiles εκ των προτέρων για να αποθηκευτούν στη μνήμη cache, καθώς τα δεδομένα για τον κύκλο ημέρας/νύχτας πρέπει ακόμα να επεξεργαστούν - και θα προκύψουν πολύ, πολύ περισσότερα δεδομένα.
Τα tiles είναι γραφικά 8bpp με δειγματοληπτική παλέτα, με ανάλυση 32x32 pixel, τα οποία είναι διατεταγμένα το ένα κάτω από το άλλο. Σε ένα τέτοιο δημιουργηθέν tileset μπορούν ωστόσο να περιλαμβάνονται πολύ περισσότερα.
Ο κύριος κοντέινερ αποτελείται από 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) | Μαγικά Bytes | |
0x0004 | uint(24) | Μήκος μπλοκ | |
0x0007 | uint(8) | Σημαίες | |
0x0008 | uint(32) | Έκδοση / Σημαίες; | Εδώ θα μπορούσε να πρόκειται για μια ένδειξη έκδοσης της μορφής αρχείου; Σε όλα τα αρχεία που έχω στη διάθεσή μου, η τιμή ήταν |
0x000c | uint(32) | Πλάτος (Οριζόντια Ανάλυση) | Δηλώνει πόσο φαρδιά είναι η εικόνα (σε pixel). Για όλα τα Wells του Outpost 2, η τιμή |
0x0010 | uint(32) | Ύψος (Κατακόρυφη Ανάλυση) | Δηλώνει πόσο υψηλή είναι η εικόνα (σε pixels). Για όλα τα Wells του Outpost 2, εδώ θα αναμένεται η τιμή |
0x0014 | uint(32) | Βάθος χρώματος; | Η σημασία αυτής της τιμής είναι άγνωστη. Δεδομένου ότι περιέχει την τιμή |
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) | Μαγικά Bytes | |
0x0004 | uint(24) | Μήκος μπλοκ | |
0x0007 | uint(8) | Σημαίες |
Τέλος, ακολουθούν τα γυμνά δεδομένα pixel, από πάνω αριστερά προς τα κάτω δεξιά, γραμμή-γραμμή.
Η τιμή των δεδομένων για τις γραφικές παραστάσεις που συνήθως είναι σε μορφή 8bpp-Bitmaps αντιστοιχεί στον δείκτη του χρώματος στην παλέτα χρωμάτων.
Η μηχανή παιχνιδιών σχεδιάζει τα Tiles *πιθανώς* κατ' απαίτηση.
Αυτό φαίνεται να οφείλεται μεταξύ άλλων στον κύκλο ημέρας-νύχτας, ο οποίος έχει 32 κλίμακες για τα μεμονωμένα Tiles. Προφανώς, αφαιρείται 'λίγο' από την τιμή φωτεινότητας. Ακριβείς τιμές δεν έχουν ακόμη προσδιοριστεί, εργάζομαι με τη βάση υπολογισμού
v *= (daylight / 48) + 0.25;
με τα δεδομένα HSV των pixels, όπου το daylight είναι μια τιμή από 0-31 και το v είναι μια τιμή μεταξύ 0-1. Επιπλέον, πρέπει να ληφθεί υπόψη ότι στον χάρτη υπάρχει μια περιφέρεια 16 Tiles αριστερά και δεξιά (η οποία εξυπηρετεί την αόρατη εμφάνιση μονάδων).
Eπιπλέον, ο κύκλος ημέρας-νύχτας φαίνεται να ενημερώνει μόνο μια στήλη του χάρτη ανά κύκλο παιχνιδιού.
Ένας επιταχυμένος κύκλος ημέρας-νύχτας φαίνεται έτσι:
ΠΡΤ
Διεύθυνση | 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) | Μήκος παλετών | Δίνει, σε αντίθεση με τη κανονική μορφή μπλοκ, τον αριθμό των παλετών που μπορούν να βρεθούν σε αυτό το αρχείο - όχι το μήκος του μπλοκ σε byte. |
0x0007 | uint(8) | Σημαίες | Πιθανώς, όπως συνήθως, σημαίες. Ωστόσο, δεν γνωρίζω καμία σημαία; καθώς όλες οι τιμές που γνωρίζω είναι |
Για τι ακριβώς σημαίνει PRT
δεν είναι γνωστό σε μένα; Ένα πιθανό παράδειγμα θα ήταν 'Πίνακας Παλέτας και Πόρων' - καθώς αυτό το αρχείο - που βρίσκεται ως op2_art.prt στο maps.vol - αφορά κάτι τέτοιο, ή θα περιέγραφε τη λειτουργία αρκετά καλά.
Αυτό το αρχείο περιέχει μια λίστα παλετών, έναν πίνακα με όλες τις χρησιμοποιούμενες bitmap, όλους τους ορισμούς animations και μια σειρά από άγνωστα δεδομένα. Ακολουθεί χαλαρά την υπάρχουσα μορφή κοντέινερ, καθώς δεν όλα τα αρχεία δεδομένων ακολουθούν αυτό το σχήμα.
Η ενότητα CPAL
(πιθανώς σημαίνει κοντέινερ παλετών) περιλαμβάνει μόνο τα δεδομένα της παλέτας, υποδεικνύοντας πόσες από τις συνήθως 1052 byte μεγάλες 8-bit παλέτες υπάρχουν.
Η αναφορά των 1052 byte δεν θεωρείται υποχρεωτική, καθώς η μορφή παλέτας θα μπορούσε ενδεχομένως να περιλαμβάνει διαφορετικά μεγέθη παλέτας. Ισχύει μόνο για το σύνολο των δεδομένων με το οποίο παραδίδεται το Outpost 2.
Μετά τις λίστες παλετών ακολουθεί άμεσα και χωρίς εισαγωγικό header, η λίστα των bitmap; ακριβώς μετά ακολουθούν οι λίστες animations.
Και οι δύο αρχίζουν αντίστοιχα με ένα uint(32) (ή πάλι uint24+uint8 flags?) που περιέχει τον αριθμό των δεδομένων.
Παλέτες
Διεύθυνση | 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) | Μαγικά Bytes | |
0x0004 | uint(24) | Μήκος παλετών | Δίνει, σε αντίθεση με τη κανονική μορφή μπλοκ, τον αριθμό των παλετών που βρίσκονται σε αυτό το αρχείο - όχι το μήκος του μπλοκ σε byte. |
0x0007 | uint(8) | Σημαίες | Πιθανώς, όπως συνήθως, σημαίες. Δεν γνωρίζω ωστόσο καμία σημαία; καθώς όλες οι γνωστές τιμές μου αντιστοιχούν σε |
Οι πληροφορίες των παλετών είναι πολύ εύκολες στην ανάγνωση.
Αποτελούνται από έναν τίτλο και ένα τμήμα δεδομένων.
Επικεφαλίδα Παλετών
Διεύθυνση | 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) | Μαγικά Bytes | |
0x0004 | uint(24) | Μήκος παλετών | Δίνει, σε αντίθεση με τη κανονική μορφή μπλοκ, τον αριθμό των παλετών που βρίσκονται σε αυτό το αρχείο - όχι το μήκος του μπλοκ σε byte. |
0x0007 | uint(8) | Σημαίες | Πιθανώς, όπως συνήθως, σημαίες. Δεν γνωρίζω ωστόσο καμία σημαία; καθώς όλες οι γνωστές τιμές μου αντιστοιχούν σε |
0x0008 | uint(32) | Έκδοση μορφής παλέτας; | Ορίζει πιθανώς ποια έκδοση του μορφότυπου παλετών ακολουθεί η παλέτα. Όλες οι παλέτες Outpost2 φαίνεται να έχουν την έκδοση |
Δεδομένα Παλέτας
Διεύθυνση | 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) | Μαγικά Bytes | |
0x0004 | uint(24) | Μήκος μπλοκ | |
0x0007 | uint(8) | Σημαίες |
Η ενότητα δεδομένων περιλαμβάνει τις μεμονωμένες καταχωρίσεις παλετών. Ο αριθμός των καταχωρίσεων παλετών προκύπτει από το μήκος του μπλοκ / 4.
Οι μεμονωμένες καταχωρίσεις έχουν την εξής απλή δομή.
Διεύθυνση | 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) | Άγνωστο - Σημαίες; | Δεν είναι σαφές τι σημαίνει αυτή η τιμή, καθώς φαίνεται ότι είναι βασικά |
Για τις παλέτες, πρέπει να σημειωθεί ότι για τις παλέτες που χρησιμοποιούνται σε animation ισχύουν οι εξής κανόνες:
- Το πρώτο χρώμα είναι ΠΑΝΤΑ διαφανές, ανεξαρτήτως της τιμής που έχει δηλωθεί εκεί.
-
Οι εγγραφές παλέτας 1-24 θεωρούνται ως χρώμα παίκτη στις παλέτες 1-8.
Δεν είναι σαφές από πού προέρχονται ακριβώς τα χρώματα εκτός από τον παίκτη 1.
Υποθέτω ότι τα υπόλοιπα χρώματα είναι hardcoded.
Εικόνες bitmap
Διεύθυνση | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | χαρ. | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Απόκλιση | Τύπος Δεδομένων | Ονομασία | Εξήγηση |
---|---|---|---|
0x0000 | uint(32) | Καθορισμένο πλάτος | Δίνει το πλάτος των γραμμών δεδομένων pixel σε byte - καθώς αυτές ευθυγραμμίζονται στα όρια των 4 byte. Έτσι είναι γρήγορα δυνατή η προσπέλαση μιας συγκεκριμένης γραμμής εικόνας. Γιατί αυτή η τιμή αποθηκεύεται ξεχωριστά, αν και θα μπορούσε να υπολογιστεί, δεν είναι σαφές. |
0x0004 | uint(32) | Απόκλιση | Δίνει τη μετατόπιση της πρώτης γραμμής στην bitmap |
0x0008 | uint(32) | Ύψος | Δηλώνει το ύψος της εικόνας σε πίξελ |
0x000c | uint(32) | Πλάτος | Δηλώνει το πλάτος της εικόνας σε pixel |
0x0010 | uint(16) | Τύπος | Δίνει τον τύπο της εικόνας. Φαίνεται ότι πρόκειται για μια μάσκα bit:
|
0x0012 | uint(16) | Παλέτα | Ορίζει ποια παλέτα από το αρχείο PRT θα χρησιμοποιηθεί |
Αυτή η δομή δεδομένων του αρχείου PRT δείχνει πώς είναι δομημένες οι bitmap που χρησιμοποιούνται για τα sprites. Αυτές οι bitmap υπηρετούν ως μεμονωμένα στοιχεία, από τα οποία πολλά συγκεντρώνονται σε ένα καρέ animation ενός sprite.
Τα συγκεκριμένα δεδομένα εικόνας βρίσκονται στην
op2_art.BMP στον φάκελο του παιχνιδιού.
Γιατί αυτό το αρχείο bitmap διαθέτει έναν (κυρίως σωστό) RIFF header bitmap, είναι ασαφές. Πιθανότατα, το Outpost 2 χρησιμοποιεί System APIs για να φορτώσει τα γραφικά, υιοθετώντας προσωρινά αυτόν τον header και αντικαθιστώντας τα αντίστοιχα, μεταβλητά πεδία.
Τα δεδομένα pixel βρίσκονται στο αρχείο BMP στην θέση Offset + το uint32-Offset, που μπορεί να βρεθεί στο αρχείο BMP στη διεύθυνση 0x000A (RIFF-Bitmap-Datenoffset), και αντιστοιχούν ξανά στη γραμμική διάταξη από πάνω αριστερά προς τα κάτω δεξιά.
Μονοχρωματικά γραφικά 1bpp μπορούν να σχεδιαστούν έτσι ώστε το χρώμα 0 να είναι πλήρης διαφάνεια, ενώ το χρώμα 1 να είναι ένα ημι-διαφανές μαύρο/γκρί, καθώς τα μονοχρωματικά γραφικά συνήθως χρησιμοποιούνται για σκιές οχημάτων και κτιρίων στις animations.
Έτσι, μπορεί κανείς να συνθέσει πολλές γραφικές παραστάσεις.
Κινούμενα σχέδια
Τώρα φτάνουμε στην κορυφαία κατηγορία των τομέων μέσα στα φορμά δεδομένων του Outpost 2:
Στις κινήσεις.
Οι λίστες κινήσεων αρχίζουν με μια παγκόσμια κεφαλίδα, η οποία χρησιμεύει κυρίως για την επαλήθευση των δεδομένων. Ακολουθούν οι συγκεκριμένες ορισμοί κινήσεων, οι οποίοι διακρίνονται σε 3 επίπεδα:
-
Κίνηση
Μια κίνηση είναι η ανώτερη οντότητα; αναπαριστά μια κίνηση μιας μονάδας, ενός κτηρίου ή μιας 'κίνηση σωματιδίων' (πτώση κομήτη, καιρός, έκρηξη) σε μια συγκεκριμένη αρχική κατάσταση. -
Καρέ
Ένα καρέ είναι μια μεμονωμένη εικόνα μέσα σε μια κίνηση. Μια κίνηση μπορεί να περιλαμβάνει ένα ή περισσότερα καρέ. -
Υποκαρέ
Ένα υποκαρέ είναι η πληροφορία ότι μια συγκεκριμένη bitmap θα πρέπει να σχεδιαστεί σε μια συγκεκριμένη θέση ενός καρέ υπό συγκεκριμένα κριτήρια. Ένα καρέ μπορεί να περιλαμβάνει ένα ή περισσότερα υποκαρέ.
Αμέσως μετά ακολουθούν οι συγκεκριμένες ορισμοί κινήσεων.
Διεύθυνση | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | χαρ. | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Απόκλιση | Τύπος Δεδομένων | Ονομασία | Εξήγηση |
---|---|---|---|
0x0000 | uint(32) | Αριθμός κινούμενων σχεδίων | Πόσες εγγραφές animation υπάρχουν |
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) | Πλαίσιο Περιοχής: Αριστερά | Δίνει την αριστερή αρχή (σε pixel) του Bounding Box. |
0x0008 | uint(32) | Περίγραμμα: Πάνω | Δίνει την άνω αρχή (σε pixel) του Bounding Box. |
0x000c | uint(32) | Περίγραμμα: Πλάτος | Δίνει το πλάτος (σε πίξελ) του Bounding Box. |
0x0010 | uint(32) | Περίγραμμα: Ύψος | Δίνει το ύψος (σε pixel) του Bounding Box. |
0x0014 | uint(32) | Απόκλιση: X | Δηλώνει το οριζόντιο κέντρο της κινούμενης εικόνας |
0x0018 | uint(32) | Απόκλιση: Y | Δίνει το κατακόρυφο κέντρο της ανιμονής |
0x001c | uint(32) | Άγνωστο 2 | Άγνωστες Πληροφορίες |
0x0020 | uint(32) | Αριθμός καρέ | Δηλώνει πόσα καρέ animation περιέχονται σε αυτή την animation |
0x0024 | uint(32) | Αριθμός παραθύρων | Δηλώνει πόσα παράθυρα θα χρησιμοποιηθούν κατά τη σχεδίαση |
Τα δεδομένα της ανώτερης στρώσης, της κινούμενης εικόνας, είναι κυρίως διοικητικά δεδομένα - η Boundingbox αναφέρεται στις συντεταγμένες της σήμανσης γύρω από το όχημα/κτίριο, όταν αυτό έχει επιλεγεί και υποδεικνύει ταυτόχρονα ποια περιοχή θα πρέπει να είναι κλικαριστή.
Η μετατόπιση (offset) προσδιορίζει κυρίως το "σημείο μηδέν"; το σημείο που πρέπει να προστεθεί ή να αφαιρεθεί στις εσωτερικές συντεταγμένες του παιχνιδιού. Θα μπορούσε κανείς να πει και μαθηματικά: η μετατόπιση αναφέρεται εδώ στην προέλευση των συντεταγμένων.
Όσον αφορά τα παράθυρα (Windows), όπως και η μετατόπιση, πρόκειται για 4 τιμές uint(32) ανά παράθυρο, οι οποίες υποδεικνύουν μια περιοχή που θεωρείται χρήσιμη για επιμέρους υποπλαίσια. Εκτός των παραθύρων δεν επιτρέπεται, αν δεν έχει προβλεφθεί κατάλληλα για την bitmap, να σχεδιαστεί.
Πλαίσιο
Διεύθυνση | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | χαρ. | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Απόκλιση | Τύπος Δεδομένων | Ονομασία | Εξήγηση |
---|---|---|---|
0x0000 | uint(8) | Αριθμός υποπλαισίων και εναλλαγή για Προαιρετικό 1, 2 | Αυτή η τιμή περιέχει:
|
0x0001 | uint(8) | Άγνωστο 1 και Toggle για Προαιρετικά 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) | Bitmap-Id | Υποδεικνύει ποια bitmap θα χρησιμοποιηθεί για αυτό το υποπλαίσιο |
0x0002 | uint(8) | Άγνωστο 1 | Είναι άγνωστο - υποψιάζομαι πάντως έντονα ότι πρόκειται για προτεραιότητα απόδοσης (Z-Layer). |
0x0003 | uint(8) | Υποπλαίσιο-Id | Δηλώνει σε ποιο υποπλαίσιο βρισκόμαστε |
0x0004 | sint(16) | Απόκλιση - Οριζόντια | Δηλώνει πού μέσα στο πλαίσιο θα πρέπει να τοποθετηθεί το υποπλαίσιο, ή πόσες pixel θα πρέπει να μετατοπιστεί η bitmap οριζόντια. |
0x0006 | sint(16) | Απόκλιση - Κάθετη | Δηλώνει πού μέσα στο πλαίσιο θα τοποθετηθεί το υποπλαίσιο, ή πόσες πίξελ θα μετατοπιστεί η bitmap κατακόρυφα. |
Έτσι μπορούμε τώρα να συνθέσουμε μεμονωμένα καρέ, καθώς και ολόκληρες κινούμενες εικόνες, όπως θα δείξουμε εδώ με ένα πιο σύνθετο παράδειγμα, την κινούμενη εικόνα με τον δείκτη 500.
Κίνηση 500
Η Animation 500 δείχνει πώς ένα Plymouth-μεταφορέας, που είναι φορτωμένος με συνηθισμένο μέταλλο, ξεφορτώνεται. Πρόκειται για μία από τις λίγες αναπαραστάσεις που αξιοποιούν τη λειτουργία παραθύρων.
Έτσι μπορεί να συνδυαστεί η πλήρης αναπαράσταση.
Δυστυχώς, υπάρχει ακόμα ένα πρόβλημα με την άνω πλευρά φόρτωσης, καθώς το αντίστοιχο bit στην πληροφορία τύπου γραφικών δεν έχει οριστεί.
Εδώ είναι μερικά ακόμα πανέμορφα κινούμενα sprites από το παιχνίδι:
Διεπαφή Χρήστη
Τώρα λείπει το περιβάλλον χρήστη του παιχνιδιού, το οποίο έχει σχεδιαστεί με την εμφάνιση βουρτσισμένου μετάλλου.
Αλλά και εδώ είναι σαφές ότι Dynamix δεν χρειάστηκε να εφεύρει τον τροχό εκ νέου; εδώ δεν χρησιμοποιούνται απλώς οι APIs User32 και GDI32 που παρέχονται από τα Windows - ιδίως χρησιμοποιείται και η διαχείριση πόρων από το User32.
Αυτά μπορούν να εξαχθούν, για παράδειγμα, μέσω προγραμμάτων όπως το Resource Hacker, που έχει αναπτυχθεί από τον Angus Johnson ως freeware, ή - αν κάποιος διστάζει να χρησιμοποιήσει το Wine σε Linux / Mac OS - με τη βοήθεια του wrestool που περιλαμβάνεται στο icoutils.
Όνομα αρχείου | Περιεχόμενο |
---|---|
Outpost2.exe | Περιέχει μόνο το εικονίδιο του παιχνιδιού, το οποίο δείχνει το διαστημικό σταθμό μπροστά από το New Terra |
op2shres.dll | Περιέχει εκτός από γραφικά για στοιχεία ελέγχου όπως περιγράμματα, κουμπιά, ραδιοκουμπιά και πλαίσια ελέγχου, επίσης φόντα διαλόγων, συνοδευτικές εικόνες για τα κείμενα αποστολών της ιστορίας και τη γραφική αναπαράσταση του κύριου μενού |
out2res.dll | Περιέχει τη διακόσμηση παραθύρων εντός του παιχνιδιού, εικονίδια για κοινό και ειδικό μέταλλο, την οθόνη φόρτωσης, γραφικά για διαλόγους καθώς και άλλα γραφικά δρομέα, επιπλέον των κινούμενων στο φάκελο του παιχνιδιού |