initial
This commit is contained in:
commit
b02c0e9d89
|
@ -0,0 +1,366 @@
|
|||
process("POP.EXE")
|
||||
|
||||
-- Startup
|
||||
local current = {}
|
||||
local old = {}
|
||||
|
||||
function clearSplits()
|
||||
for k,v in pairs(splits) do
|
||||
print("clearing ", k)
|
||||
v["done"] = false
|
||||
end
|
||||
end
|
||||
|
||||
function startup()
|
||||
clearSplits()
|
||||
end
|
||||
|
||||
|
||||
-- Get game state
|
||||
function state()
|
||||
-- Some memory value that reliably changes when 'New Game' is pressed.
|
||||
current.startValue = readAddress('int', 0x6BC980)
|
||||
|
||||
-- Prince's position
|
||||
current.xPos = readAddress('float', 0x00699474, 0xC, 0x30)
|
||||
current.yPos = readAddress('float', 0x00699474, 0xC, 0x34)
|
||||
current.zPos = readAddress('float', 0x00699474, 0xC, 0x38)
|
||||
|
||||
current.xCam = readAddress('float', 0x006DA1B0, 0xC, 0x30)
|
||||
|
||||
-- The Vizier's health where 0 is unharmed and 4 is dead.
|
||||
current.vizierHealth = readAddress('int', 0x0040E518, 0x6C, 0x18, 0x4, 0x44, 0x0)
|
||||
end
|
||||
|
||||
|
||||
-- Main functions
|
||||
function start()
|
||||
--Detecting if the game has started on the balcony.
|
||||
evalSplit(splits["FarahBalcony"])
|
||||
return splits["FarahBalcony"]["done"] and current.startValue == 1 and current.xCam <= -92.8
|
||||
end
|
||||
|
||||
function reset()
|
||||
return splits["FarahBalcony"]["done"] and current.xCam <= -92 and current.xCam > -92.8
|
||||
end
|
||||
|
||||
--function update()
|
||||
--end
|
||||
|
||||
|
||||
-- Position range detection
|
||||
function inXRange(xMin, xMax)
|
||||
return current.xPos >= xMin and current.xPos <= xMax
|
||||
end
|
||||
|
||||
function inYRange(yMin, yMax)
|
||||
return current.yPos >= yMin and current.yPos <= yMax
|
||||
end
|
||||
|
||||
function inZRange(zMin, zMax)
|
||||
return current.zPos >= zMin and current.zPos <= zMax
|
||||
end
|
||||
|
||||
function splitByXYZ(xMin, xMax, yMin, yMax, zMin, zMax)
|
||||
return inXRange(xMin, xMax) and inYRange(yMin, yMax) and inZRange(zMin, zMax)
|
||||
end
|
||||
|
||||
|
||||
-- Split Logic
|
||||
function split()
|
||||
local res = false
|
||||
for name,split in pairs(splits) do
|
||||
if split["enable"] and not split["done"] then
|
||||
res = res or hasSplitUpdated(split)
|
||||
end
|
||||
if res and name ~= "FarahBalcony" do
|
||||
splits["FarahBalcony"]["done"] = false
|
||||
end
|
||||
end
|
||||
|
||||
if splitByXYZ(-477.88, -477, -298, -297.1, -0.5, -0.4) then
|
||||
splits["SoTLU"]["done"] = false;
|
||||
end
|
||||
if splitByXYZ(658.26, 661.46, 210.92, 213.72, 12.5, 30) then
|
||||
splits["AboveCredits"]["done"] = true;
|
||||
end
|
||||
|
||||
return res
|
||||
end
|
||||
|
||||
function evalSplit(split)
|
||||
local res = split["func"]()
|
||||
if res then
|
||||
split["done"] = res
|
||||
end
|
||||
end
|
||||
|
||||
function hasSplitUpdated(split)
|
||||
local old = split["done"]
|
||||
|
||||
if not split["done"] then
|
||||
evalSplit(split)
|
||||
else
|
||||
return false
|
||||
end
|
||||
|
||||
local new = split["done"]
|
||||
|
||||
return not (old == new)
|
||||
end
|
||||
|
||||
|
||||
-- Splits
|
||||
splits = {
|
||||
["FarahBalcony"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-103.264, -103.262, -4.8, -4.798, 1.341, 1.343) end;
|
||||
},
|
||||
-- "Split just before the first save prompt"
|
||||
["GasStation"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(252, 258, 130.647, 134, 22.999, 23.001) end;
|
||||
},
|
||||
-- "Split on starting the first fight after the CGI cutscene"
|
||||
["SandsUnleashed"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-6.177, -6.175, 62.905, 62.907, 7.604, 7.606) end;
|
||||
},
|
||||
-- "Split on entering the first guest room"
|
||||
["FirstGuestRoom"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(30.297, 30.299, 42.126, 42.128, 12.998, 13) end;
|
||||
},
|
||||
-- "Split on entering the Sultan's chamber at the cutscene"
|
||||
["SultanChamberZipless"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(98.445, 98.447, 39.567, 39.57, -8.96, -8.958) end;
|
||||
},
|
||||
-- "Split at the death abuse in Sultan's chamber"
|
||||
["SultanChamber"] = {
|
||||
enable = false;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(134.137, 134.139, 54.990, 54.992, -32.791, -32.789) end;
|
||||
},
|
||||
-- "Split on exiting the palace defense system"
|
||||
["PalaceDefence"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(4.547, 8.851, 40.494, 47.519, -39.001, -38.999) end;
|
||||
},
|
||||
-- "Split on starting the fight with the Sand King"
|
||||
["DadStart"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(6.714, 6.716, 57.698, 57.7, 21.005, 21.007) end;
|
||||
},
|
||||
-- "Split at the end of the fight on loading the next area"
|
||||
["DadDead"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-6.001, -5.999, -18.6, -18.4, 1.998, 2.001) end;
|
||||
},
|
||||
-- "Split on hitting the button to let Farah enter Warehouse"
|
||||
["TheWarehouse"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-73.352, -71.233, -28.5, -26.868, -1.001, -0.818) end;
|
||||
},
|
||||
-- "Split on entering the zoo"
|
||||
["TheZoo"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-141.299, -139.797, -47.21, -42.801, -31.1, -30.9) end;
|
||||
},
|
||||
-- "Split at the 'Atop a bird cage' save vortex"
|
||||
["BirdCage"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-211, -208, -23, -21, -9, -8.8) end;
|
||||
},
|
||||
-- "Split at the start of cliffs and waterfall"
|
||||
["CliffWaterfalls"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-233.6, -231.4, 33.7, 35, -42.6, -42.4) end;
|
||||
},
|
||||
-- "Split at the end of cliffs and Waterfall"
|
||||
["TheBathsZipless"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-215.85, -214.089, 54.261, 58.699, -43.501, -43.499) end;
|
||||
},
|
||||
-- "Split on death abuse at the start of baths"
|
||||
["TheBaths"] = {
|
||||
enable = false;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-211.427, -211.425, 56.602, 56.604, -43.501, -43.499) end;
|
||||
},
|
||||
-- "Split on obtaining the second sword at baths"
|
||||
["SecondSword"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-106.819, -106.817, 81.097, 81.099, -27.269, -27.267) end;
|
||||
},
|
||||
-- "Split at the start of daybreak"
|
||||
["TheDaybreak"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-76, -70, 192.4, 197.6, -56.6, -54) end;
|
||||
},
|
||||
-- "Split on death abuse in the mess hall"
|
||||
["TheMesshall"] = {
|
||||
enable = false;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-183.267, -183.265, 234.685, 234.687, -37.528, -37.526) end;
|
||||
},
|
||||
-- "Split near the first lever at Drawbridge Tower"
|
||||
["DrawbridgeTower"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-267, -262, 232, 267, -35.6, -35.5) end;
|
||||
},
|
||||
-- "Split at the end of the collapsing bridge"
|
||||
["BrokenBridge"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-265, -257, 159, 167, -13.6, -13.4) end;
|
||||
},
|
||||
-- "Split on entering the caves after the door"
|
||||
["TheCavesZipless"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-303, -297.5, 112, 113.5, -56.1, -55.9) end;
|
||||
},
|
||||
-- "Split on the beam at the start of Waterfall"
|
||||
["TheCaves"] = {
|
||||
enable = false;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-246.839, -241.677, 78.019, 87.936, -71.731, -70.7) end;
|
||||
},
|
||||
-- "Split at the end of the descent in Waterfall"
|
||||
["TheWaterfall"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-242, -240.5, 79.5, 83, -121, -118) end;
|
||||
},
|
||||
-- "Split on entering the underground reservoir"
|
||||
["TheUGReservoirZipless"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-121, -110, -9, -7, -154.1, -153.9) end;
|
||||
},
|
||||
-- "Split on exiting the underground reservoir"
|
||||
["TheUGReservoir"] = {
|
||||
enable = false;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-51.477, -48.475, 72.155, 73.657, -24.802, -24.799) end;
|
||||
},
|
||||
-- "Split on entering the hall of learning"
|
||||
["HallofLearning"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(73, 79, 161, 163, -24.1, -23.9) end;
|
||||
},
|
||||
-- "Split on death abuse at the end of observatory"
|
||||
["TheObservatory"] = {
|
||||
enable = false;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(139.231, 139.233, 162.556, 162.558, -29.502, -29.5) end;
|
||||
},
|
||||
-- "Split on exiting the observatory"
|
||||
["ObservatoryExit"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(137, 141, 164, 164.67, -29.5, -29.2) end;
|
||||
},
|
||||
-- "Split on exiting hall of learning courtyards"
|
||||
["HoLCourtyardsExit"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(72, 77, 90, 95.7, -27.1, -26.9) end;
|
||||
},
|
||||
-- "Split on entering the prison"
|
||||
["TheAzadPrison"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(190, 195, -21, -19, -17.6, -17.3) end;
|
||||
},
|
||||
-- "Split on entering the torture chamber"
|
||||
["TortureChamberZipless"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(187.5, 192.5, -39, -37.5, -119.1, -118.9) end;
|
||||
},
|
||||
-- "Split on death abuse at the start of torture chamber"
|
||||
["TortureChamber"] = {
|
||||
enable = false;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(189.999, 190.001, -43.278, -43.276, -119.001, -118.999) end;
|
||||
},
|
||||
-- "Split on entering the elevator"
|
||||
["TheElevator"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(74, 75, -46.751, -43.252, -34, -33) end;
|
||||
},
|
||||
-- "Split at the start of the long unskippable cutscene"
|
||||
["TheDreamZipless"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(99, 101, -11, -10, -56, -54) end;
|
||||
},
|
||||
-- "Split at the start of the 'infinite' stairs"
|
||||
["TheDream"] = {
|
||||
enable = false;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(95.8, 96, -25.1, -24.9, -74.9, -74.7) end;
|
||||
},
|
||||
-- "Split at the start of the tomb"
|
||||
["TheTomb"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(100.643, 100.645, -11.543, -11.541, -67.588, -67.586) end;
|
||||
},
|
||||
-- "Split at the start of the ascent back up the Tower of Dawn"
|
||||
["TowerofDawn"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(35.5, 35.7, -50, -39, -32, -30) end;
|
||||
},
|
||||
-- "Split on the Ladder near the setting sun save"
|
||||
["SettingSun"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(60, 61, -58, -57, 30, 32) end;
|
||||
},
|
||||
-- "Split on starting the last fight with enemies"
|
||||
["HonorGlory"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(81, 82, -60.3, -59.7, 89, 90) end;
|
||||
},
|
||||
-- "Split on starting the Vizier fight"
|
||||
["GrandRewind"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(660.376, 660.378, 190.980, 190.983, 0.432, 0.434) end;
|
||||
},
|
||||
-- "Split on defeating the Vizier or hitting the credits trigger"
|
||||
["SoTEnd"] = {
|
||||
enable = true;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(658.26, 661.46, 210.92, 213.72, 9.8, 12.5) and (splits["AboveCredits"] ~= nil or current.vizierHealth == 4) end;
|
||||
},
|
||||
-- "Split on obtaining each life upgrade"
|
||||
["SoTLU"] = {
|
||||
enable = false;
|
||||
done = false;
|
||||
func = function() return splitByXYZ(-492.608, -492.606, -248.833, -248.831, 0.219, 0.221) end;
|
||||
},
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
# Sands Trilogy Killer (Linux)
|
||||
|
||||
Okay, this one is a real mess, **I wouldn't ever in my life recommend it to anyone**.
|
||||
|
||||
This is mostly here for basic use and if anyone is interested in how I approach the restart on linux. Because I use NixOS, I can't just write a quick and dirty program on rust to do it for me because it does not allow to use any dynamically linked binaries, so I would have to start messing with flakes and packaging in order to use it, which I could not be really bothered to right now.
|
||||
|
||||
The only alternative was to use a pure bash script. There is a bare attempt at configuration and multi-game/profiles with the settings json, but because of terminal emulator shenanigans I can't say it'll work everywhere, it has been successfully tested with both `kitty` and `xterm`.
|
||||
|
||||
I will get around doing a proper CLI utility for this at some point, but given I'm the only linux runner at the moment, it is not my top priority right now. Same applies for porting the splits and auto-splitter from the other games.
|
||||
|
||||
## Setup
|
||||
This requires the `jq` package to parse the config JSON, make sure you have the powershell wrapper installed on your wine prefix too.
|
||||
|
||||
Open the config json and point it to your executables. Make sure the `term` value is set to the same terminal you'll be launching the script on. You can also set the key to activate the restart. Because it is using `read` for the input, it can only take "keyboard produced characters".
|
||||
|
||||
To launch, execute the script along with the profile number like:
|
||||
|
||||
```
|
||||
./SandsTrilogyKiller 0
|
||||
```
|
||||
|
||||
### Global keys
|
||||
|
||||
Because of disparity between X11 and Wayland, specially now Wine 10 is around, how you handle the keys is up to you.
|
||||
|
||||
For X11 you should be able to bind a global hotkey on you DE/WM to send the trigger key to the script via `xdotool`.
|
||||
|
||||
For wayland it's dependent on your compositor, for hyprland this is what I use:
|
||||
|
||||
```
|
||||
# SoT
|
||||
bind = $mainMod, code:49, sendshortcut, , 49, title:SandsTrilogyKiller
|
||||
```
|
||||
|
||||
Where mainMod is super. Code 49 stands for "`", adapt to your needs.
|
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
echo -ne '\033]0;SandsTrilogyKiller\007'
|
||||
echo "$(date)"
|
||||
|
||||
term=$(jq -r '.["term"]' config.json)
|
||||
hotkey=$(jq -r '.["key"]' config.json)
|
||||
exe=$(jq -r '.["'$1'"]["exec"]' config.json)
|
||||
mutexName=$(jq -r '.["'$1'"]["mutexName"]' config.json)
|
||||
|
||||
echo "Terminal: $term"
|
||||
echo "Activation key: $hotkey"
|
||||
echo "EXE path: $exe"
|
||||
echo "Mutex name: $mutexName"
|
||||
|
||||
mutexPid=''
|
||||
exePid=''
|
||||
|
||||
getMutexPid () {
|
||||
mutexPid="$(pgrep -af "$mutexName\")$" | awk '{print $1}')"
|
||||
}
|
||||
|
||||
getExePid () {
|
||||
exePid="$(pgrep -af "POP.EXE$" | awk '{print $1}')"
|
||||
}
|
||||
|
||||
createMutex () {
|
||||
$term -e wine 'powershell' '-NoExit' '& New-Object System.Threading.Mutex($false, "'$mutexName'")' &
|
||||
sleep 3s
|
||||
while [ -z "$mutexPid" ]; do
|
||||
getMutexPid
|
||||
done
|
||||
}
|
||||
|
||||
getCreateMutex () {
|
||||
getMutexPid
|
||||
|
||||
if [[ -z $(eval "echo \"\$$1\"") ]]; then
|
||||
echo "Mutex not detected, creating..."
|
||||
createMutex $1
|
||||
else
|
||||
echo "Mutex detected"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
getCreateMutex mutexPid
|
||||
echo $mutexPid
|
||||
|
||||
getExePid
|
||||
|
||||
while true; do
|
||||
read -rsn1 keycode
|
||||
if [[ "$hotkey" = "$keycode" ]]; then
|
||||
echo "$(date) activated"
|
||||
if [[ -n exePid ]] ; then
|
||||
echo "Killing $exePid"
|
||||
kill -9 $exePid
|
||||
rm "$(jq -r '.["0"]["exec"]' config.json | xargs dirname)/PrinceSM"
|
||||
exePid=''
|
||||
fi
|
||||
|
||||
wine $exe &> /dev/null &
|
||||
while [ -z $exePid ]; do
|
||||
getExePid
|
||||
done
|
||||
echo $exePid
|
||||
fi
|
||||
done
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"term": "xterm",
|
||||
"key": "`",
|
||||
"0": {
|
||||
"exec": "/path/to/sot/POP.EXE",
|
||||
"mutexName": "POP_Launcher"
|
||||
},
|
||||
"1": {
|
||||
"exec": "/path/to/ww/POP2.EXE",
|
||||
"mutexName": "POP5_Launcher\"); New-Object System.Threading.Mutex($false, \"POP_Watchdog",
|
||||
"comment": "Shameless workaround to WW needing two mutex. Untested."
|
||||
},
|
||||
"2": {
|
||||
"exec": "/path/to/t2t/POP3.EXE",
|
||||
"mutexName": "POP3_Launcher"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
{
|
||||
"title": "Prince of Persia: The Sands of Time - All Collectibles (Standard)",
|
||||
"attempt_count": 0,
|
||||
"start_delay": "00:00:00",
|
||||
"splits": [
|
||||
{
|
||||
"title": "The Treasure Vaults",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sands of Time",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 1",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 2",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 3",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Baths (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 4",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Messhall (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 5",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Caves (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 6",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 7",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Observatory (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 8",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 9",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Dream",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 10",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Honor and Glory",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Grand Rewind",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The End",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
{
|
||||
"title": "Prince of Persia: The Sands of Time - Any% (Standard)",
|
||||
"attempt_count": 0,
|
||||
"start_delay": "00:00:00",
|
||||
"splits": [
|
||||
{
|
||||
"title": "The Treasure Vaults",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sands of Time",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sultan's Chamber (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Death of the Sand King",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Baths (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Messhall (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Caves",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Underground Reservoir",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Observatory (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Torture Chamber (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Dream",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Honor and Glory",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Grand Rewind",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The End",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,182 @@
|
|||
{
|
||||
"title": "Prince of Persia: The Sands of Time - All Collectibles (No Major Glitches)",
|
||||
"attempt_count": 0,
|
||||
"start_delay": "00:00:00",
|
||||
"splits": [
|
||||
{
|
||||
"title": "The Treasure Vaults",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sands of Time",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "First Guest Room",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 1",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Palace Defense",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 2",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Death of the Sand King",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 3",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Zoo",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Atop a Bird Cage",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Cliffs and Waterfall",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Baths",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 4",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Daybreak",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Drawbridge Tower",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "A Broken Bridge",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 5",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Waterfall",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "An Underground Reservoir",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 6",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Hall of Learning",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 7",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Observatory",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Hall of Learning Courtyards",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Prison",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 8",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 9",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Dream",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Tomb",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 10",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Tower of Dawn",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Setting Sun",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Honor and Glory",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Grand Rewind",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The End",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
{
|
||||
"title": "Prince of Persia: The Sands of Time - All Collectibles (Standard)",
|
||||
"attempt_count": 0,
|
||||
"start_delay": "00:00:00",
|
||||
"splits": [
|
||||
{
|
||||
"title": "The Treasure Vaults",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sands of Time",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 1",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 2",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 3",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Baths (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 4",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Messhall (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 5",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Caves (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 6",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 7",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Observatory (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 8",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 9",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Dream",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 10",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Honor and Glory",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Grand Rewind",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The End",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,182 @@
|
|||
{
|
||||
"title": "Prince of Persia: The Sands of Time - All Collectibles (Zipless)",
|
||||
"attempt_count": 0,
|
||||
"start_delay": "00:00:00",
|
||||
"splits": [
|
||||
{
|
||||
"title": "The Treasure Vaults",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sands of Time",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "First Guest Room",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 1",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Palace Defense",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 2",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Death of the Sand King",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 3",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Zoo",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Atop a Bird Cage",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Cliffs and Waterfall",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Baths",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 4",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Daybreak",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Drawbridge Tower",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "A Broken Bridge",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 5",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Waterfall",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "An Underground Reservoir",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 6",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Hall of Learning",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 7",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Observatory",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Hall of Learning Courtyards",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Prison",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 8",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 9",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Dream",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Tomb",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Life Upgrade 10",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Tower of Dawn",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Setting Sun",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Honor and Glory",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Grand Rewind",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The End",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,167 @@
|
|||
{
|
||||
"title": "Prince of Persia: The Sands of Time - Any% (No Major Glitches)",
|
||||
"attempt_count": 0,
|
||||
"start_delay": "00:00:00",
|
||||
"splits": [
|
||||
{
|
||||
"title": "The Treasure Vaults",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sands of Time",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "First Guest Room",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sultan's Chamber",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Palace Defense",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sand King",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Death of the Sand King",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Warehouse",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Zoo",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Atop a Bird Cage",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Cliffs and Waterfall",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Baths",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Sword of the Mighty Warrior",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Daybreak",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Drawbridge Tower",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "A Broken Bridge",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Caves",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Waterfall",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "An Underground Reservoir",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Hall of Learning",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Observatory",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Hall of Learning Courtyards",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Prison",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Torture Chamber",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Elevator",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Dream",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Tomb",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Tower of Dawn",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Setting Sun",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Honor and Glory",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Grand Rewind",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The End",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
{
|
||||
"title": "Prince of Persia: The Sands of Time - Any% (Standard)",
|
||||
"attempt_count": 0,
|
||||
"start_delay": "00:00:00",
|
||||
"splits": [
|
||||
{
|
||||
"title": "The Treasure Vaults",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sands of Time",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Sultan's Chamber (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Death of the Sand King",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Baths (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Messhall (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Caves",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Exit Underground Reservoir",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Observatory (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Torture Chamber (Death)",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Dream",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "Honor and Glory",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The Grand Rewind",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
},
|
||||
{
|
||||
"title": "The End",
|
||||
"time": "",
|
||||
"best_segment": null
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,200 @@
|
|||
{
|
||||
"title": "Prince of Persia: The Sands of Time - Any% (Zipless)",
|
||||
"attempt_count": 0,
|
||||
"splits": [
|
||||
{
|
||||
"title": "The Treasure Vaults",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Sands of Time",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "First Guest Room",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Sultan's Chamber",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Exit Palace Defense",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Sand King",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Death of the Sand King",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Warehouse",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Zoo",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Atop a Bird Cage",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Cliffs and Waterfall",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Baths",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Sword of the Mighty Warrior",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Daybreak",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Drawbridge Tower",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "A Broken Bridge",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Caves",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Waterfall",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "An Underground Reservoir",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Hall of Learning",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Exit Observatory",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Exit Hall of Learning Courtyards",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Prison",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Torture Chamber",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Elevator",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Dream",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Tomb",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Tower of Dawn",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Setting Sun",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "Honor and Glory",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The Grand Rewind",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
},
|
||||
{
|
||||
"title": "The End",
|
||||
"time": "0.000000",
|
||||
"best_time": "0.000000",
|
||||
"best_segment": "0.000000"
|
||||
}
|
||||
],
|
||||
"width": 480,
|
||||
"height": 600
|
||||
}
|
Loading…
Reference in New Issue