Oregon Trail tombstones format

From ModdingWiki
Jump to navigation Jump to search
Oregon Trail tombstones format
Format typeSaved game
Save locationsUnrestricted
Elements savedLocation
Games

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.

Data Type Name Description
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[10] 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[33] Epitaph The epitaph. The length above is how many characters are used, everything after that is garbage.
UINT8 Unknown ! Unknown.
UINT8 Unknown ! Unknown.
UINT8 Unknown ! Unknown.
UINT8 Unknown ! Unknown.
UINT8 Unknown ! Unknown.
UINT8 Unknown ! Unknown.
UINT8 Unknown ! Unknown.
2 records

Source Code

Printer

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

Credits

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!)