Lingo: The Pilgrim Update (#2884)

* An option was added to enable or disable the pilgrimage, and it defaults to disabled. When disabled, the client will prevent you from performing a pilgrimage (i.e. the yellow border will not appear when you enter the 1 sunwarp). The sun painting is added to the item pool when pilgrimage is disabled, as otherwise there is no way into the Pilgrim Antechamber. Inversely, the sun painting is no longer in the item pool when pilgrimage is enabled (even if door shuffle is on), requiring you to perform a pilgrimage to get to that room.
* The canonical pilgrimage has been deprecated. Instead, there is logic for determining whether a pilgrimage is possible.
* Two options were added that allow the player to decide whether paintings and/or Crossroads - Roof Access are permitted during the pilgrimage. Both default to disabled. These options apply both to logical expectations in the generator, and are also enforced by the game client.
* An option was added to control how sunwarps are accessed. The default is for them to always be accessible, like in the base game. It is also possible to disable them entirely (which is not possible when pilgrimage is enabled), or lock them behind items similar to door shuffle. It can either be one item that unlocks all sunwarps at the same time, six progressive items that unlock the sunwarps from 1 to 6, or six individual items that unlock the sunwarps in any order. This option is independent from door shuffle.
* An option was added that shuffles sunwarps. This acts similarly to painting shuffle. The 12 sunwarps are re-ordered and re-paired. Sunwarps that were previously entrances or exits do not need to stay entrances or exits. Performing a pilgrimage requires proceeding through the sunwarps in the new order, rather than the original one.
* Pilgrimage was added as a win condition. It requires you to solve the blue PILGRIM panel in the Pilgrim Antechamber.
This commit is contained in:
Star Rauchenberger
2024-04-18 11:45:33 -05:00
committed by GitHub
parent 6b50c91ce2
commit 740b76ebd5
17 changed files with 1151 additions and 296 deletions

View File

@@ -37,12 +37,14 @@ configured_panels = Set[]
mentioned_rooms = Set[]
mentioned_doors = Set[]
mentioned_panels = Set[]
mentioned_sunwarp_entrances = Set[]
mentioned_sunwarp_exits = Set[]
door_groups = {}
directives = Set["entrances", "panels", "doors", "paintings", "progression"]
directives = Set["entrances", "panels", "doors", "paintings", "sunwarps", "progression"]
panel_directives = Set["id", "required_room", "required_door", "required_panel", "colors", "check", "exclude_reduce", "tag", "link", "subtag", "achievement", "copy_to_sign", "non_counting", "hunt"]
door_directives = Set["id", "painting_id", "panels", "item_name", "item_group", "location_name", "skip_location", "skip_item", "door_group", "include_reduce", "junk_item", "event"]
door_directives = Set["id", "painting_id", "panels", "item_name", "item_group", "location_name", "skip_location", "skip_item", "door_group", "include_reduce", "event", "warp_id"]
painting_directives = Set["id", "enter_only", "exit_only", "orientation", "required_door", "required", "required_when_no_doors", "move", "req_blocked", "req_blocked_when_no_doors"]
non_counting = 0
@@ -67,17 +69,17 @@ config.each do |room_name, room|
entrances = []
if entrance.kind_of? Hash
if entrance.keys() != ["painting"] then
entrances = [entrance]
end
entrances = [entrance]
elsif entrance.kind_of? Array
entrances = entrance
end
entrances.each do |e|
entrance_room = e.include?("room") ? e["room"] : room_name
mentioned_rooms.add(entrance_room)
mentioned_doors.add(entrance_room + " - " + e["door"])
if e.include?("door") then
entrance_room = e.include?("room") ? e["room"] : room_name
mentioned_rooms.add(entrance_room)
mentioned_doors.add(entrance_room + " - " + e["door"])
end
end
end
@@ -204,8 +206,8 @@ config.each do |room_name, room|
end
end
if not door.include?("id") and not door.include?("painting_id") and not door["skip_item"] and not door["event"] then
puts "#{room_name} - #{door_name} :::: Should be marked skip_item or event if there are no doors or paintings"
if not door.include?("id") and not door.include?("painting_id") and not door.include?("warp_id") and not door["skip_item"] and not door["event"] then
puts "#{room_name} - #{door_name} :::: Should be marked skip_item or event if there are no doors, paintings, or warps"
end
if door.include?("panels")
@@ -292,6 +294,32 @@ config.each do |room_name, room|
end
end
(room["sunwarps"] || []).each do |sunwarp|
if sunwarp.include? "dots" and sunwarp.include? "direction" then
if sunwarp["dots"] < 1 or sunwarp["dots"] > 6 then
puts "#{room_name} :::: Contains a sunwarp with an invalid dots value"
end
if sunwarp["direction"] == "enter" then
if mentioned_sunwarp_entrances.include? sunwarp["dots"] then
puts "Multiple #{sunwarp["dots"]} sunwarp entrances were found"
else
mentioned_sunwarp_entrances.add(sunwarp["dots"])
end
elsif sunwarp["direction"] == "exit" then
if mentioned_sunwarp_exits.include? sunwarp["dots"] then
puts "Multiple #{sunwarp["dots"]} sunwarp exits were found"
else
mentioned_sunwarp_exits.add(sunwarp["dots"])
end
else
puts "#{room_name} :::: Contains a sunwarp with an invalid direction value"
end
else
puts "#{room_name} :::: Contains a sunwarp without a dots and direction"
end
end
(room["progression"] || {}).each do |progression_name, door_list|
door_list.each do |door|
if door.kind_of? Hash then