OpenRCT2Lib parses OpenRCT2's New Savefile format (*.park).
This offers *.park file's informations, such as Park's name, Scenario's objective and etc.
npm install --save openrct2lib
const OpenRCT2Lib = require('openrct2lib');
let parkData = new OpenRCT2Lib(__dirname + '/Example.park');
console.log(parkData.park.name); // Park's name
console.log(parkData.park.cash); // Park's cash
console.log(parkData.scenario.name); // Scenario's name
Header is not compressed even if the save file is compressed with gzip.
| Property | Description | Misc. |
|---|---|---|
| header.magic | ||
| header.targetVersion | ||
| header.minVersion | ||
| header.numChunks | Count of chunks | |
| header.uncompressedSize | uncompressed size | |
| header.compression | 0: uncompressed, 1: gzip | |
| header.compressedSize | compressed size | |
| header.FNV1a | FNV1a hash | (Offers array of integers yet due to my skill) |
| header.padding | It is just a padding, which is filled with 0 |
| Property | Description | Misc. |
|---|---|---|
| authoring.engine | E.g. "openrct2 v0.1.2 (Linux)" | |
| authoring.authors | ||
| authoring.dateStarted | ||
| authoring.dateModified |
(Not supported yet)
| Property | Description | Misc. |
|---|---|---|
| scenario.category | Category of the scenario | |
| scenario.name | Name of the scenario | |
| scenario.parkName | Park name of the scenario | |
| scenario.details | Description of the scenario | |
| scenario.objective.type | Objective type in number. 1: Guests by {guests} 2: Park value by {currency} 3: Have Fun! 4: Build the best {guest} you can! 5: To have 10 different types of roller coasters 6: Guests by {guests} with park rating 700 above 7: Monthly ride income at least {currency} 8: To have 10 roller coasters with min. length {guests} 9: To finish 5 coasters with excitement ratings of at least {currency} 10: Repay loans and park value with {currency} 11: Monthly profit from food/drink/sales of at least {currency} * {guests} = objective.guests, {currency} = objective.currency |
|
| scenario.objective.typeText | Objective type in text | |
| scenario.objective.year | Year value of objective | |
| scenario.objective.guests | Count of Guests for objective.type=1 RideId for objective.type=4 Min. length of coaster for objective.type=8 |
|
| scenario.objective.currency | Money value for objective.type=2, 7, 10, 11 Min. excitement ratings for objective.type=9 |
|
| scenario.objective.ratingWarningDays | ||
| scenario.objective.completedCompanyValue | Completed company value | |
| scenario.objective.allowEarlyCompletion | 1 if the scenario early completion is allowed | |
| scenario.objective.scenarioFileName | Seems not accurate? |
| Property | Description | Misc. |
|---|---|---|
| general.gamePaused | ||
| general.currentTicks | ||
| general.dateMonthTicks | ||
| general.dateMonthsElapsed | ||
| general.rand | ||
| general.guestInitialHappiness | ||
| general.guestInitialCash | ||
| general.guestInitialHunger | ||
| general.guestInitialThirst | ||
| general.peepSpawns | (Not supported yet) |
| Property | Description | Misc. |
|---|---|---|
| climate.state | Current weather state 0: Cool and wet 1: Warm 2: Hot and dry 3: Cold |
|
| climate.updateTimer | ||
| climate.current | weather temperature weatherEffect weatherGloom level |
|
| climate.next | (Same with above) |
| Property | Description | Misc. |
|---|---|---|
| park.name | Park name | |
| park.cash | Current cash | |
| park.loan | Current loan | |
| park.maxLoan | Maximum loan | |
| park.loanInterestRate | Interest rate of loan | |
| park.parkFlags | ||
| park.parkEntranceFee | Entrance fee of the park | |
| park.staffHandymanColour | Colour index of Handymans | |
| park.staffMechanicColour | Colour index of Mechanics | |
| park.staffSecurityColour | Colour index of Securities | |
| park.samePriceThroughoutPark | ||
| park.numMonths | ||
| park.numTypes | ||
| park.expenditureTable | ||
| park.historicalProfit | ||
| park.marketingCampaigns | ||
| park.currentAwards | ||
| park.parkValue | Current park value | |
| park.companyValue | Current company value | |
| park.parkSize | Area of the park | |
| park.numGuestsInPark | Count of guests in the park | |
| park.numGuestsHeadingForPark | Count of guests heading for the park's entrance | |
| park.parkRating | Park rating | |
| park.parkRatingCasualtyPenalty | ||
| park.currentEpenditure | ||
| park.currentProfit | ||
| park.weeklyProfitAverageDividend | ||
| park.weeklyProfitAverageDivisor | ||
| park.totalAdmissions | ||
| park.totalIncomeFromAdmissions | ||
| park.totalRideValueForMoney | ||
| park.numGuestsInParkLastWeek | ||
| park.guestChangeModifier | ||
| park.guestGenerationProbability | ||
| park.suggestedGuestMaximum | ||
| park.peepWarningThrottle | ||
| park.parkRatingHistory | History of park rating | |
| park.guestsInParkHistory | History of count of guests in the park | |
| park.cashHistory | History of cash | |
| park.weeklyProfitHistory | History of weekly profit | |
| park.parkValueHistory | History of park value |
| Property | Description | Misc. |
|---|---|---|
| research.fundinglevel | ||
| research.priorities | ||
| research.progressStage | ||
| research.progress | ||
| research.expectMonth | ||
| research.expectDay | ||
| research.lastItem | ||
| research.nextItem | ||
| research.itemsUninvented | ||
| research.itemsInvented |
(Not supported yet)
(Not supported yet)
(Not fully supported yet)
| Property | Description | Misc. |
|---|---|---|
| tiles.mapX | Map width | |
| tiles.mapY | Map height |
(Not supported yet)
(Not supported yet)
(Not supported yet)
(Not supported yet)
(Not supported yet)
- https://github.com/OpenRCT2/OpenRCT2/blob/develop/src/openrct2/park/ParkFile.cpp
- https://raw.githubusercontent.com/OpenRCT2/OpenRCT2/develop/docs/save-format.md
(I think it might be outdated but useful for ref.)