Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shivers: Implement New Game #1836

Merged
merged 79 commits into from
Nov 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
8530585
Added a few archipelago files
GodlFire Mar 25, 2023
efd28de
Added mandatory connections
GodlFire Mar 25, 2023
d738598
Added rules file
GodlFire Mar 26, 2023
390231d
Testing out events
GodlFire Apr 4, 2023
07191e0
Added fill_restrictive to determine where the pots will be placed onc…
GodlFire Apr 5, 2023
47a4751
Changes to init
GodlFire Apr 8, 2023
1a8f32b
Fixes
GodlFire Apr 15, 2023
fe70b9b
Added rules to ensure you have access to the puzzles clue
GodlFire Apr 15, 2023
cba1bfa
Fixed typo in metal pot top dupe
GodlFire Apr 16, 2023
d2b2a4d
Fixed slot data to use the correct data
GodlFire Apr 19, 2023
84715f0
Added checks for ixupi captures
GodlFire Apr 23, 2023
665b507
Generation issue fixes
GodlFire Apr 25, 2023
58d5cc4
Moved item creation out of generate basic and into create_items. Fixe…
GodlFire Apr 27, 2023
b6dc7fa
Set key for underground lake room as early item
GodlFire Apr 29, 2023
13afe21
Bug fix with broken seed
GodlFire Apr 30, 2023
bff36df
Added easier lyre filler item
GodlFire Apr 30, 2023
bbc709a
Added final riddle as checks
GodlFire May 1, 2023
4144967
Removed zip
GodlFire May 1, 2023
dc4870d
Minor change to water capture logic, shouldnt actually make a differe…
GodlFire May 2, 2023
827c72c
New locations, bug fixes, better progression
GodlFire May 6, 2023
eca1c32
Added filler items for ixupi availability.
GodlFire May 9, 2023
dc7c8ad
Removes redundancy in text
Mathx2 May 16, 2023
4997e48
Setup instruction
Mathx2 May 16, 2023
120ed80
Merge pull request #1 from Mathx2/patch-1
GodlFire May 16, 2023
550d317
Lobby access option, exclude locations added to slot data.
GodlFire May 18, 2023
c8593d5
Merge branch 'main' of https://github.com/GodlFire/Shivers
GodlFire May 18, 2023
8d07505
Merge pull request #2 from Mathx2/patch-2
GodlFire May 18, 2023
4186bee
Update setup_en.md
GodlFire May 18, 2023
0e7b2e9
Fixed bedroom room that was not fixed in the rules file
GodlFire May 20, 2023
ecc04ea
Fixed DUPE pot pieces ending up in other worlds. Added Game page docu…
GodlFire May 21, 2023
a4f79e8
Update __init__.py
GodlFire May 23, 2023
5225469
Cleaning up files for PR
GodlFire May 24, 2023
153bdb4
Cleaning up for PR
GodlFire May 24, 2023
9a759f8
Clean up for PR
GodlFire May 24, 2023
0d93b17
Clean up for PR
GodlFire May 24, 2023
cb1c15c
Review comments
GodlFire May 26, 2023
a05ec4c
Rename Plants Room to Greenhouse Room for Consistency
Mathx2 Jun 1, 2023
31a8ad1
Rename Plants Room to Greenhouse Room for Consistency
Mathx2 Jun 1, 2023
22d5109
Merge pull request #3 from Mathx2/patch-5
GodlFire Jun 2, 2023
4754780
Merge pull request #4 from Mathx2/patch-4
GodlFire Jun 2, 2023
d1d501e
Updated Plants to Greenhouse for consistency
GodlFire Jun 2, 2023
9b0bb8a
Create completion path in spoiler log
Mathx2 Jun 13, 2023
5ec050a
Update Rules.py
Mathx2 Jun 13, 2023
a9e512f
Update Items.py
Mathx2 Jun 13, 2023
58906a6
Update Locations.json
Mathx2 Jun 13, 2023
618a203
Update Regions.json
Mathx2 Jun 13, 2023
d434b71
forgot to remove a renamed connection
Mathx2 Jun 13, 2023
4f281a8
Filled in missing connections from future room shuffle, added option …
GodlFire Jun 13, 2023
d6b88f1
Merge pull request #5 from Mathx2/main
GodlFire Jun 13, 2023
6fb543b
Fixed a typo in new region connections
GodlFire Jun 14, 2023
542b54c
Fixed generation bug from new changse
GodlFire Jun 14, 2023
c201733
apworld requires case sensitivity, need to do this in 2 commits for i…
GodlFire Jun 22, 2023
2979c3a
apworld requires case sensitivity
GodlFire Jun 22, 2023
0826f85
DeamonHunter review comments addressed
GodlFire Jun 25, 2023
3f3b687
New Features
GodlFire Jul 24, 2023
ff0e7d1
New Feature
GodlFire Jul 24, 2023
0888455
New Features
GodlFire Aug 8, 2023
a5714e5
Fixed key for front door not being set to local when in local mode
GodlFire Aug 20, 2023
317e8a1
Merge pull request #6 from ArchipelagoMW/main
GodlFire Sep 2, 2023
09ec349
Updated to use new self.random
GodlFire Sep 2, 2023
7ab98a4
Update en_Shivers.md
GodlFire Sep 17, 2023
6ff2280
Update setup_en.md
GodlFire Sep 17, 2023
bd48138
Key rule prep for room rando
Mathx2 Sep 27, 2023
3693d96
Merge pull request #7 from Mathx2/main
GodlFire Oct 1, 2023
32a27dc
Adds new filler item heal
GodlFire Oct 4, 2023
935ef46
New Feature
GodlFire Oct 8, 2023
2f0fdde
Fix unit test for completion condition
GodlFire Oct 17, 2023
3a3295d
Fixed a failure to generate when not using elevator checks
GodlFire Oct 17, 2023
be36a11
Merge branch 'main' into main
GodlFire Oct 23, 2023
54899a6
New Feature: Early Beth
GodlFire Oct 24, 2023
eb44a0e
New feature
GodlFire Oct 26, 2023
309c391
Cleanup
GodlFire Oct 28, 2023
93bbd39
alwaysintreble review comments addressed
GodlFire Nov 2, 2023
a165652
Fixed an option not using new API. Added weight selection for filler …
GodlFire Nov 4, 2023
5d3e178
Merge branch 'main' into main
GodlFire Nov 24, 2023
7d8441c
Updated README.md and docs/CODEOWNERS to add mentions to shivers
GodlFire Nov 24, 2023
9c84946
Adds missing rule requirments for option PuzzleHintsRequired due to n…
GodlFire Nov 24, 2023
ea2ade4
Phar's review comments addressed
GodlFire Nov 24, 2023
f8718fa
Merge branch 'main' into main
ThePhar Nov 24, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ Currently, the following games are supported:
* Lingo
* Pokémon Emerald
* DOOM II
* Shivers


For setup and instructions check out our [tutorials page](https://archipelago.gg/tutorial/).
Expand Down
3 changes: 3 additions & 0 deletions docs/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@
# Risk of Rain 2
/worlds/ror2/ @kindasneaki

# Shivers
/worlds/shivers/ @GodlFire

# Sonic Adventure 2 Battle
/worlds/sa2b/ @PoryGone @RaspberrySpace

Expand Down
17 changes: 17 additions & 0 deletions worlds/shivers/Constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import os
import json
import pkgutil

def load_data_file(*args) -> dict:
fname = os.path.join("data", *args)
return json.loads(pkgutil.get_data(__name__, fname).decode())

location_id_offset: int = 27000

location_info = load_data_file("locations.json")
location_name_to_id = {name: location_id_offset + index \
for index, name in enumerate(location_info["all_locations"])}

exclusion_info = load_data_file("excluded_locations.json")

region_info = load_data_file("regions.json")
112 changes: 112 additions & 0 deletions worlds/shivers/Items.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
from BaseClasses import Item, ItemClassification
import typing

class ShiversItem(Item):
game: str = "Shivers"

class ItemData(typing.NamedTuple):
code: int
type: str
classification: ItemClassification = ItemClassification.progression

SHIVERS_ITEM_ID_OFFSET = 27000

item_table = {
#Pot Pieces
"Water Pot Bottom": ItemData(SHIVERS_ITEM_ID_OFFSET + 0, "pot"),
"Wax Pot Bottom": ItemData(SHIVERS_ITEM_ID_OFFSET + 1, "pot"),
"Ash Pot Bottom": ItemData(SHIVERS_ITEM_ID_OFFSET + 2, "pot"),
"Oil Pot Bottom": ItemData(SHIVERS_ITEM_ID_OFFSET + 3, "pot"),
"Cloth Pot Bottom": ItemData(SHIVERS_ITEM_ID_OFFSET + 4, "pot"),
"Wood Pot Bottom": ItemData(SHIVERS_ITEM_ID_OFFSET + 5, "pot"),
"Crystal Pot Bottom": ItemData(SHIVERS_ITEM_ID_OFFSET + 6, "pot"),
"Lightning Pot Bottom": ItemData(SHIVERS_ITEM_ID_OFFSET + 7, "pot"),
"Sand Pot Bottom": ItemData(SHIVERS_ITEM_ID_OFFSET + 8, "pot"),
"Metal Pot Bottom": ItemData(SHIVERS_ITEM_ID_OFFSET + 9, "pot"),
"Water Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 10, "pot"),
"Wax Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 11, "pot"),
"Ash Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 12, "pot"),
"Oil Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 13, "pot"),
"Cloth Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 14, "pot"),
"Wood Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 15, "pot"),
"Crystal Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 16, "pot"),
"Lightning Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 17, "pot"),
"Sand Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 18, "pot"),
"Metal Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 19, "pot"),

#Keys
"Key for Office Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 20, "key"),
"Key for Bedroom Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 21, "key"),
"Key for Three Floor Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 22, "key"),
"Key for Workshop": ItemData(SHIVERS_ITEM_ID_OFFSET + 23, "key"),
"Key for Office": ItemData(SHIVERS_ITEM_ID_OFFSET + 24, "key"),
"Key for Prehistoric Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 25, "key"),
"Key for Greenhouse Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 26, "key"),
"Key for Ocean Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 27, "key"),
"Key for Projector Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 28, "key"),
"Key for Generator Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 29, "key"),
"Key for Egypt Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 30, "key"),
"Key for Library Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 31, "key"),
"Key for Tiki Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 32, "key"),
"Key for UFO Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 33, "key"),
"Key for Torture Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 34, "key"),
"Key for Puzzle Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 35, "key"),
"Key for Bedroom": ItemData(SHIVERS_ITEM_ID_OFFSET + 36, "key"),
"Key for Underground Lake Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 37, "key"),
"Key for Janitor Closet": ItemData(SHIVERS_ITEM_ID_OFFSET + 38, "key"),
"Key for Front Door": ItemData(SHIVERS_ITEM_ID_OFFSET + 39, "key-optional"),

#Abilities
"Crawling": ItemData(SHIVERS_ITEM_ID_OFFSET + 50, "ability"),

#Event Items
"Victory": ItemData(SHIVERS_ITEM_ID_OFFSET + 60, "victory"),

#Duplicate pot pieces for fill_Restrictive
"Water Pot Bottom DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 70, "potduplicate"),
"Wax Pot Bottom DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 71, "potduplicate"),
"Ash Pot Bottom DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 72, "potduplicate"),
"Oil Pot Bottom DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 73, "potduplicate"),
"Cloth Pot Bottom DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 74, "potduplicate"),
"Wood Pot Bottom DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 75, "potduplicate"),
"Crystal Pot Bottom DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 76, "potduplicate"),
"Lightning Pot Bottom DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 77, "potduplicate"),
"Sand Pot Bottom DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 78, "potduplicate"),
"Metal Pot Bottom DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 79, "potduplicate"),
"Water Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 80, "potduplicate"),
"Wax Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 81, "potduplicate"),
"Ash Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 82, "potduplicate"),
"Oil Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 83, "potduplicate"),
"Cloth Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 84, "potduplicate"),
"Wood Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 85, "potduplicate"),
"Crystal Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 86, "potduplicate"),
"Lightning Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 87, "potduplicate"),
"Sand Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 88, "potduplicate"),
"Metal Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 89, "potduplicate"),

#Filler
"Empty": ItemData(SHIVERS_ITEM_ID_OFFSET + 90, "filler"),
"Easier Lyre": ItemData(SHIVERS_ITEM_ID_OFFSET + 91, "filler", ItemClassification.filler),
"Water Always Available in Lobby": ItemData(SHIVERS_ITEM_ID_OFFSET + 92, "filler2", ItemClassification.filler),
"Wax Always Available in Library": ItemData(SHIVERS_ITEM_ID_OFFSET + 93, "filler2", ItemClassification.filler),
"Wax Always Available in Anansi Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 94, "filler2", ItemClassification.filler),
"Wax Always Available in Tiki Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 95, "filler2", ItemClassification.filler),
"Ash Always Available in Office": ItemData(SHIVERS_ITEM_ID_OFFSET + 96, "filler2", ItemClassification.filler),
"Ash Always Available in Burial Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 97, "filler2", ItemClassification.filler),
"Oil Always Available in Prehistoric Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 98, "filler2", ItemClassification.filler),
"Cloth Always Available in Egypt": ItemData(SHIVERS_ITEM_ID_OFFSET + 99, "filler2", ItemClassification.filler),
"Cloth Always Available in Burial Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 100, "filler2", ItemClassification.filler),
"Wood Always Available in Workshop": ItemData(SHIVERS_ITEM_ID_OFFSET + 101, "filler2", ItemClassification.filler),
"Wood Always Available in Blue Maze": ItemData(SHIVERS_ITEM_ID_OFFSET + 102, "filler2", ItemClassification.filler),
"Wood Always Available in Pegasus Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 103, "filler2", ItemClassification.filler),
"Wood Always Available in Gods Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 104, "filler2", ItemClassification.filler),
"Crystal Always Available in Lobby": ItemData(SHIVERS_ITEM_ID_OFFSET + 105, "filler2", ItemClassification.filler),
"Crystal Always Available in Ocean": ItemData(SHIVERS_ITEM_ID_OFFSET + 106, "filler2", ItemClassification.filler),
"Sand Always Available in Greenhouse Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 107, "filler2", ItemClassification.filler),
"Sand Always Available in Ocean": ItemData(SHIVERS_ITEM_ID_OFFSET + 108, "filler2", ItemClassification.filler),
"Metal Always Available in Projector Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 109, "filler2", ItemClassification.filler),
"Metal Always Available in Bedroom": ItemData(SHIVERS_ITEM_ID_OFFSET + 110, "filler2", ItemClassification.filler),
"Metal Always Available in Prehistoric": ItemData(SHIVERS_ITEM_ID_OFFSET + 111, "filler2", ItemClassification.filler),
"Heal": ItemData(SHIVERS_ITEM_ID_OFFSET + 112, "filler3", ItemClassification.filler)

}
50 changes: 50 additions & 0 deletions worlds/shivers/Options.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
from Options import Choice, DefaultOnToggle, Toggle, PerGameCommonOptions
from dataclasses import dataclass


class LobbyAccess(Choice):
"""Chooses how keys needed to reach the lobby are placed.
- Normal: Keys are placed anywhere
- Early: Keys are placed early
- Local: Keys are placed locally"""
display_name = "Lobby Access"
option_normal = 0
option_early = 1
option_local = 2

class PuzzleHintsRequired(DefaultOnToggle):
"""If turned on puzzle hints will be available before the corresponding puzzle is required. For example: The Tiki
Drums puzzle will be placed after access to the security cameras which give you the solution. Turning this off
allows for greater randomization."""
display_name = "Puzzle Hints Required"

class InformationPlaques(Toggle):
"""Adds Information Plaques as checks."""
display_name = "Include Information Plaques"

class FrontDoorUsable(Toggle):
"""Adds a key to unlock the front door of the museum."""
display_name = "Front Door Usable"

class ElevatorsStaySolved(DefaultOnToggle):
"""Adds elevators as checks and will remain open upon solving them."""
display_name = "Elevators Stay Solved"

class EarlyBeth(DefaultOnToggle):
"""Beth's body is open at the start of the game. This allows any pot piece to be placed in the slide and early checks on the second half of the final riddle."""
display_name = "Early Beth"

class EarlyLightning(Toggle):
"""Allows lightning to be captured at any point in the game. You will still need to capture all ten Ixupi for victory."""
display_name = "Early Lightning"


@dataclass
class ShiversOptions(PerGameCommonOptions):
lobby_access: LobbyAccess
puzzle_hints_required: PuzzleHintsRequired
include_information_plaques: InformationPlaques
front_door_usable: FrontDoorUsable
elevators_stay_solved: ElevatorsStaySolved
early_beth: EarlyBeth
early_lightning: EarlyLightning
Loading