Добавить вторую волну мира Foundations

This commit is contained in:
2026-08-19 11:25:52 +03:00
parent b31c2ea720
commit 4d8aa28f0a
19 changed files with 556 additions and 25 deletions
@@ -7,7 +7,7 @@ number worldId levelId role title introducedMechanic mechanics targetDeaths targ
23 foundations foundations.remote-volunteer MAIN Remote Volunteer saw-launch movement,jump,death,saw-launch,pressure,door 1 50 true
24 foundations foundations.frozen-step MAIN Frozen Step frozen-body movement,jump,death,frozen-body 1 48 true
25 foundations foundations.living-wire MAIN Living Wire conductive-body movement,jump,death,conductive-body,door 1 52 true
26 foundations foundations.borrowed-time MAIN Borrowed Time timed-switch movement,jump,timed-switch,moving-platform,pit 0 55 true
26 foundations foundations.borrowed-time MAIN Second Hand timed-switch movement,jump,timed-switch,moving-platform,pit 0 55 true
27 foundations foundations.two-keys MAIN Two Keys signal-and movement,jump,death,pressure,conductive-body,signal-and,door 2 65 true
28 foundations foundations.clean-restart MAIN Clean Restart - movement,jump,death,saw-launch,frozen-body,conductive-body 3 75 true
29 foundations foundations.minimum-cost CHALLENGE Minimum Cost - movement,jump,death,corpse-bridge,pressure,timed-switch 2 65 true
1 number worldId levelId role title introducedMechanic mechanics targetDeaths targetSeconds collectible
7 23 foundations foundations.remote-volunteer MAIN Remote Volunteer saw-launch movement,jump,death,saw-launch,pressure,door 1 50 true
8 24 foundations foundations.frozen-step MAIN Frozen Step frozen-body movement,jump,death,frozen-body 1 48 true
9 25 foundations foundations.living-wire MAIN Living Wire conductive-body movement,jump,death,conductive-body,door 1 52 true
10 26 foundations foundations.borrowed-time MAIN Borrowed Time Second Hand timed-switch movement,jump,timed-switch,moving-platform,pit 0 55 true
11 27 foundations foundations.two-keys MAIN Two Keys signal-and movement,jump,death,pressure,conductive-body,signal-and,door 2 65 true
12 28 foundations foundations.clean-restart MAIN Clean Restart - movement,jump,death,saw-launch,frozen-body,conductive-body 3 75 true
13 29 foundations foundations.minimum-cost CHALLENGE Minimum Cost - movement,jump,death,corpse-bridge,pressure,timed-switch 2 65 true
@@ -1 +1 @@
{"formatVersion":1,"physicsVersion":1,"levels":["level-01.json","level-02.json","level-03.json","level-04.json","level-05.json","level-06.json","level-07.json","level-08.json","level-09.json","level-10.json","level-11.json","level-12.json","level-13.json","level-14.json","level-15.json","level-16.json","level-17.json","level-18.json","level-19.json","level-20.json","level-21.json","level-22.json"]}
{"formatVersion":1,"physicsVersion":1,"levels":["level-01.json","level-02.json","level-03.json","level-04.json","level-05.json","level-06.json","level-07.json","level-08.json","level-09.json","level-10.json","level-11.json","level-12.json","level-13.json","level-14.json","level-15.json","level-16.json","level-17.json","level-18.json","level-19.json","level-20.json","level-21.json","level-22.json","level-23.json","level-24.json","level-25.json","level-26.json"]}
@@ -0,0 +1,16 @@
{
"formatVersion":1,"physicsVersion":1,"number":23,
"id":"foundations.remote-volunteer","worldId":"foundations",
"copy":{"en":{"title":"Remote Volunteer","hint":"Let the saw deliver one volunteer to the raised plate, then clear the retained body."},"ru":{"title":"Удалённый доброволец","hint":"Пусть пила доставит добровольца на поднятую плиту, затем перепрыгните оставшееся тело."}},
"world":{"width":2450,"height":1080},"spawn":{"x":130,"y":760},
"goal":{"x":2220,"y":770,"width":86,"height":110},
"collectible":{"x":1180,"y":650,"width":58,"height":58},
"targets":{"deaths":1,"seconds":50},
"platforms":[
{"box":{"x":0,"y":880,"width":2450,"height":200}},
{"box":{"x":900,"y":800,"width":400,"height":34}}
],
"hazards":[{"type":"SAW","box":{"x":600,"y":760,"width":96,"height":96},"impulseX":550,"impulseY":-700}],
"switches":[{"type":"PRESSURE","box":{"x":1030,"y":780,"width":170,"height":20},"signalId":"remote-gate","durationSeconds":0,"requiredMass":1}],
"doors":[{"box":{"x":1540,"y":560,"width":82,"height":320},"requiredSignals":["remote-gate"]}]
}
@@ -0,0 +1,16 @@
{
"formatVersion":1,"physicsVersion":1,"number":24,
"id":"foundations.frozen-step","worldId":"foundations",
"copy":{"en":{"title":"Frozen Step","hint":"Freeze one volunteer, stand on the block, and jump into the upper route."},"ru":{"title":"Замёрзшая ступень","hint":"Заморозьте добровольца, встаньте на блок и прыгните на верхний маршрут."}},
"world":{"width":2350,"height":1080},"spawn":{"x":130,"y":760},
"goal":{"x":2110,"y":500,"width":86,"height":110},
"collectible":{"x":1280,"y":500,"width":58,"height":58},
"targets":{"deaths":1,"seconds":48},
"platforms":[
{"box":{"x":0,"y":880,"width":1260,"height":200}},
{"box":{"x":850,"y":590,"width":560,"height":34}},
{"box":{"x":1500,"y":610,"width":700,"height":34}}
],
"hazards":[{"type":"FREEZER","box":{"x":720,"y":776,"width":100,"height":104}}],
"switches":[],"doors":[]
}
@@ -0,0 +1,13 @@
{
"formatVersion":1,"physicsVersion":1,"number":25,
"id":"foundations.living-wire","worldId":"foundations",
"copy":{"en":{"title":"Living Wire","hint":"One conductive body keeps the relay alive. Jump over it to use the open route."},"ru":{"title":"Живой проводник","hint":"Одно проводящее тело удерживает реле. Перепрыгните его и используйте открытый маршрут."}},
"world":{"width":2350,"height":1080},"spawn":{"x":130,"y":760},
"goal":{"x":2130,"y":770,"width":86,"height":110},
"collectible":{"x":1100,"y":790,"width":58,"height":58},
"targets":{"deaths":1,"seconds":52},
"platforms":[{"box":{"x":0,"y":880,"width":2350,"height":200}}],
"hazards":[{"type":"ELECTRIC","box":{"x":720,"y":780,"width":110,"height":100},"relayId":"living-power"}],
"switches":[],
"doors":[{"box":{"x":1350,"y":560,"width":84,"height":320},"requiredSignals":["living-power"]}]
}
@@ -0,0 +1,21 @@
{
"formatVersion":1,"physicsVersion":1,"number":26,
"id":"foundations.borrowed-time","worldId":"foundations",
"copy":{"en":{"title":"Second Hand","hint":"Start the clock, ride across, and use the high far relay if the gate closes."},"ru":{"title":"Секундная стрелка","hint":"Запустите часы, переедьте пропасть и используйте высокое дальнее реле, если ворота закроются."}},
"world":{"width":2700,"height":1080},"spawn":{"x":130,"y":760},
"goal":{"x":2470,"y":600,"width":86,"height":110},
"collectible":{"x":2350,"y":580,"width":58,"height":58},
"targets":{"deaths":0,"seconds":55},
"platforms":[
{"box":{"x":0,"y":880,"width":1100,"height":200}},
{"box":{"x":1580,"y":880,"width":1120,"height":200}},
{"box":{"x":2230,"y":710,"width":470,"height":34}},
{"box":{"x":940,"y":820,"width":360,"height":34},"travelX":380,"travelY":0,"periodSeconds":4.4,"controlId":"second-hand"}
],
"hazards":[{"type":"PIT","box":{"x":1100,"y":880,"width":480,"height":200}}],
"switches":[
{"type":"TIMED","box":{"x":760,"y":810,"width":90,"height":70},"signalId":"second-hand","durationSeconds":9.0,"requiredMass":1},
{"type":"TIMED","box":{"x":1700,"y":650,"width":90,"height":70},"signalId":"second-hand","durationSeconds":4.0,"requiredMass":1}
],
"doors":[{"box":{"x":1920,"y":560,"width":82,"height":320},"requiredSignals":["second-hand"]}]
}
@@ -85,7 +85,7 @@ public final class LevelContentToolTest {
assertEquals(0, exitCode);
assertEquals("Validated production content matrix: worlds=4; planned=52; "
+ "authored=5; releaseTotal=69\n",
+ "authored=9; releaseTotal=69\n",
output.toString(StandardCharsets.UTF_8));
assertEquals("", errors.toString(StandardCharsets.UTF_8));
}