Oregon Trail tombstones format
Tombstones in The Oregon Trail are stored in the TOMBS.REC file. A tombstone record consists of the name of the party's leader, an epitaph, and the location where the last member of the party died. The game saves only two tombstones, one for the first half of the trail, the other for the second. If another party dies on the half of the trail which already contains a tombstone, the existing one is overwritten with the new one.
|UINT8||Last Landmark||The last landmark this party reached.|
|UINT8||Next Landmark||The landmark this party was heading toward.|
|UINT8||Miles to Next Landmark||How many miles the party needed to travel to reach the next landmark.|
|UINT8||Name Length||The length of the name of the party leader.|
|char||Name||The name of the party leader. The length above is how many characters are used, everything after that is garbage.|
|UINT8||Epitaph Length||The length of the epitaph.|
|char||Epitaph||The epitaph. The length above is how many characters are used, everything after that is garbage.|
This FreeBASIC program will print each of the tombstones.
Declare Function GetLandmarkName(Index As UByte) As String Dim As UByte StringLength, Buffer, LastLandmark, NextLandmark, MilesToNextLandmark Dim As UShort Miles Dim As Integer Record Dim As String TombName, Epitaph Open "TOMB1.REC" For Binary As #1 For Record = 1 To 2 ' Location. Get #1, , LastLandmark Get #1, , NextLandmark Get #1, , MilesToNextLandmark ' Name. Get #1, , StringLength TombName = Space(10) Get #1, , TombName TombName = Left(TombName, StringLength) ' Epitaph. Get #1, , StringLength Epitaph = Space(33) Get #1, , Epitaph Epitaph = Left(Epitaph, StringLength) Get #1, , Buffer Get #1, , Buffer Get #1, , Buffer Get #1, , Buffer Get #1, , Buffer Get #1, , Buffer Get #1, , Buffer Print TombName + " - " + Epitaph Print "Reached " + GetLandmarkName(LastLandmark) + ", died " + Str(MilesToNextLandmark) + " miles away from " + GetLandmarkName(NextLandmark) Print Next Record Sleep Function GetLandmarkName(Index As UByte) As String ' Returns the name of the landmark from the specified index. Dim As String LandmarkName Select Case Index Case 0: LandmarkName = "Independence" Case 1: LandmarkName = "Kansas River crossing" Case 2: LandmarkName = "Big Blue River crossing" Case 3: LandmarkName = "Fort Kearney" Case 4: LandmarkName = "Chimney Rock" Case 5: LandmarkName = "Fort Laramie" Case 6: LandmarkName = "Independence Rock" Case 7: LandmarkName = "South Pass" Case 8: LandmarkName = "Fort Bridger" Case 9: LandmarkName = "Green River" Case 10: LandmarkName = "Soda Spring" Case 11: LandmarkName = "Fort Hall" Case 12: LandmarkName = "Snake River" Case 13: LandmarkName = "Fort Boise" Case 14: LandmarkName = "Blue Mountains" Case 15: LandmarkName = "Fort Walla Walla" Case 16: LandmarkName = "The Dalles" Case 17: LandmarkName = "Willamette Valley" End Select Return LandmarkName End Function
This format was reverse engineered by TheAlmightyGuru. If you find this information helpful in a project you're working on, please give credit where credit is due. (A link back to this wiki would be nice too!)