Skip to content

Commit a18ffce

Browse files
PoryGoneAustinSumigray
authored andcommitted
Celeste 64: v1.2 Content Update (ArchipelagoMW#3210)
* Cleanup and new option support * Handle new locations * Support higher Strawberry counts * Don't add start inventory items to the pool * Support Move Shuffle functionality and items * Hard and Move Shuffle Logic * Fix Options * Update CHANGELOG.md * Add standard moves logic for signs 3 and 4 * Fix Option Tooltip * Add tracker link to setup guide * Fix unit test * Fix option tooltips * Missing Space * Move option checking out of rule function * Delete just_gen500.bat
1 parent 542d7ec commit a18ffce

File tree

9 files changed

+677
-275
lines changed

9 files changed

+677
-275
lines changed

worlds/celeste64/CHANGELOG.md

+32
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,38 @@
11
# Celeste 64 - Changelog
22

33

4+
## v1.2
5+
6+
### Features:
7+
8+
- New optional Location Checks
9+
- Friendsanity
10+
- Signsanity
11+
- Carsanity
12+
- Move Shuffle
13+
- Basic movement abilities can be shuffled into the item pool
14+
- Ground Dash
15+
- Air Dash
16+
- Skid Jump
17+
- Climb
18+
- Logic Difficulty
19+
- Completely overhauled logic system
20+
- Standard or Hard logic difficulty can be chosen
21+
- Badeline Chasers
22+
- Opt-in options which cause Badelines to start following you as you play, which will kill on contact
23+
- These can be set to spawn based on either:
24+
- The number of locations you've checked
25+
- The number of Strawberry items you've received
26+
- How fast they follow behind you can be specified
27+
28+
### Quality of Life:
29+
30+
- The maximum number of Strawberries in the item pool can be directly set
31+
- The required amount of Strawberries is now set via percentage
32+
- All items beyond the amount placed in the item pool will be `Raspberry` items, which have no effect
33+
- Any unique items placed into the `start_inventory` will not be placed into the item pool
34+
35+
436
## v1.1 - First Stable Release
537

638
### Features:

worlds/celeste64/Items.py

+23-37
Original file line numberDiff line numberDiff line change
@@ -16,43 +16,29 @@ class Celeste64ItemData(NamedTuple):
1616
type: ItemClassification = ItemClassification.filler
1717

1818

19-
item_data_table: Dict[str, Celeste64ItemData] = {
20-
ItemName.strawberry: Celeste64ItemData(
21-
code = celeste_64_base_id + 0,
22-
type=ItemClassification.progression_skip_balancing,
23-
),
24-
ItemName.dash_refill: Celeste64ItemData(
25-
code = celeste_64_base_id + 1,
26-
type=ItemClassification.progression,
27-
),
28-
ItemName.double_dash_refill: Celeste64ItemData(
29-
code = celeste_64_base_id + 2,
30-
type=ItemClassification.progression,
31-
),
32-
ItemName.feather: Celeste64ItemData(
33-
code = celeste_64_base_id + 3,
34-
type=ItemClassification.progression,
35-
),
36-
ItemName.coin: Celeste64ItemData(
37-
code = celeste_64_base_id + 4,
38-
type=ItemClassification.progression,
39-
),
40-
ItemName.cassette: Celeste64ItemData(
41-
code = celeste_64_base_id + 5,
42-
type=ItemClassification.progression,
43-
),
44-
ItemName.traffic_block: Celeste64ItemData(
45-
code = celeste_64_base_id + 6,
46-
type=ItemClassification.progression,
47-
),
48-
ItemName.spring: Celeste64ItemData(
49-
code = celeste_64_base_id + 7,
50-
type=ItemClassification.progression,
51-
),
52-
ItemName.breakables: Celeste64ItemData(
53-
code = celeste_64_base_id + 8,
54-
type=ItemClassification.progression,
55-
)
19+
collectable_item_data_table: Dict[str, Celeste64ItemData] = {
20+
ItemName.strawberry: Celeste64ItemData(celeste_64_base_id + 0x0, ItemClassification.progression_skip_balancing),
21+
ItemName.raspberry: Celeste64ItemData(celeste_64_base_id + 0x9, ItemClassification.filler),
5622
}
5723

24+
unlockable_item_data_table: Dict[str, Celeste64ItemData] = {
25+
ItemName.dash_refill: Celeste64ItemData(celeste_64_base_id + 0x1, ItemClassification.progression),
26+
ItemName.double_dash_refill: Celeste64ItemData(celeste_64_base_id + 0x2, ItemClassification.progression),
27+
ItemName.feather: Celeste64ItemData(celeste_64_base_id + 0x3, ItemClassification.progression),
28+
ItemName.coin: Celeste64ItemData(celeste_64_base_id + 0x4, ItemClassification.progression),
29+
ItemName.cassette: Celeste64ItemData(celeste_64_base_id + 0x5, ItemClassification.progression),
30+
ItemName.traffic_block: Celeste64ItemData(celeste_64_base_id + 0x6, ItemClassification.progression),
31+
ItemName.spring: Celeste64ItemData(celeste_64_base_id + 0x7, ItemClassification.progression),
32+
ItemName.breakables: Celeste64ItemData(celeste_64_base_id + 0x8, ItemClassification.progression),
33+
}
34+
35+
move_item_data_table: Dict[str, Celeste64ItemData] = {
36+
ItemName.ground_dash: Celeste64ItemData(celeste_64_base_id + 0xA, ItemClassification.progression),
37+
ItemName.air_dash: Celeste64ItemData(celeste_64_base_id + 0xB, ItemClassification.progression),
38+
ItemName.skid_jump: Celeste64ItemData(celeste_64_base_id + 0xC, ItemClassification.progression),
39+
ItemName.climb: Celeste64ItemData(celeste_64_base_id + 0xD, ItemClassification.progression),
40+
}
41+
42+
item_data_table: Dict[str, Celeste64ItemData] = {**collectable_item_data_table, **unlockable_item_data_table, **move_item_data_table}
43+
5844
item_table = {name: data.code for name, data in item_data_table.items() if data.code is not None}

worlds/celeste64/Locations.py

+61-121
Original file line numberDiff line numberDiff line change
@@ -16,127 +16,67 @@ class Celeste64LocationData(NamedTuple):
1616
address: Optional[int] = None
1717

1818

19-
location_data_table: Dict[str, Celeste64LocationData] = {
20-
LocationName.strawberry_1 : Celeste64LocationData(
21-
region = "Forsaken City",
22-
address = celeste_64_base_id + 0,
23-
),
24-
LocationName.strawberry_2 : Celeste64LocationData(
25-
region = "Forsaken City",
26-
address = celeste_64_base_id + 1,
27-
),
28-
LocationName.strawberry_3 : Celeste64LocationData(
29-
region = "Forsaken City",
30-
address = celeste_64_base_id + 2,
31-
),
32-
LocationName.strawberry_4 : Celeste64LocationData(
33-
region = "Forsaken City",
34-
address = celeste_64_base_id + 3,
35-
),
36-
LocationName.strawberry_5 : Celeste64LocationData(
37-
region = "Forsaken City",
38-
address = celeste_64_base_id + 4,
39-
),
40-
LocationName.strawberry_6 : Celeste64LocationData(
41-
region = "Forsaken City",
42-
address = celeste_64_base_id + 5,
43-
),
44-
LocationName.strawberry_7 : Celeste64LocationData(
45-
region = "Forsaken City",
46-
address = celeste_64_base_id + 6,
47-
),
48-
LocationName.strawberry_8 : Celeste64LocationData(
49-
region = "Forsaken City",
50-
address = celeste_64_base_id + 7,
51-
),
52-
LocationName.strawberry_9 : Celeste64LocationData(
53-
region = "Forsaken City",
54-
address = celeste_64_base_id + 8,
55-
),
56-
LocationName.strawberry_10 : Celeste64LocationData(
57-
region = "Forsaken City",
58-
address = celeste_64_base_id + 9,
59-
),
60-
LocationName.strawberry_11 : Celeste64LocationData(
61-
region = "Forsaken City",
62-
address = celeste_64_base_id + 10,
63-
),
64-
LocationName.strawberry_12 : Celeste64LocationData(
65-
region = "Forsaken City",
66-
address = celeste_64_base_id + 11,
67-
),
68-
LocationName.strawberry_13 : Celeste64LocationData(
69-
region = "Forsaken City",
70-
address = celeste_64_base_id + 12,
71-
),
72-
LocationName.strawberry_14 : Celeste64LocationData(
73-
region = "Forsaken City",
74-
address = celeste_64_base_id + 13,
75-
),
76-
LocationName.strawberry_15 : Celeste64LocationData(
77-
region = "Forsaken City",
78-
address = celeste_64_base_id + 14,
79-
),
80-
LocationName.strawberry_16 : Celeste64LocationData(
81-
region = "Forsaken City",
82-
address = celeste_64_base_id + 15,
83-
),
84-
LocationName.strawberry_17 : Celeste64LocationData(
85-
region = "Forsaken City",
86-
address = celeste_64_base_id + 16,
87-
),
88-
LocationName.strawberry_18 : Celeste64LocationData(
89-
region = "Forsaken City",
90-
address = celeste_64_base_id + 17,
91-
),
92-
LocationName.strawberry_19 : Celeste64LocationData(
93-
region = "Forsaken City",
94-
address = celeste_64_base_id + 18,
95-
),
96-
LocationName.strawberry_20 : Celeste64LocationData(
97-
region = "Forsaken City",
98-
address = celeste_64_base_id + 19,
99-
),
100-
LocationName.strawberry_21 : Celeste64LocationData(
101-
region = "Forsaken City",
102-
address = celeste_64_base_id + 20,
103-
),
104-
LocationName.strawberry_22 : Celeste64LocationData(
105-
region = "Forsaken City",
106-
address = celeste_64_base_id + 21,
107-
),
108-
LocationName.strawberry_23 : Celeste64LocationData(
109-
region = "Forsaken City",
110-
address = celeste_64_base_id + 22,
111-
),
112-
LocationName.strawberry_24 : Celeste64LocationData(
113-
region = "Forsaken City",
114-
address = celeste_64_base_id + 23,
115-
),
116-
LocationName.strawberry_25 : Celeste64LocationData(
117-
region = "Forsaken City",
118-
address = celeste_64_base_id + 24,
119-
),
120-
LocationName.strawberry_26 : Celeste64LocationData(
121-
region = "Forsaken City",
122-
address = celeste_64_base_id + 25,
123-
),
124-
LocationName.strawberry_27 : Celeste64LocationData(
125-
region = "Forsaken City",
126-
address = celeste_64_base_id + 26,
127-
),
128-
LocationName.strawberry_28 : Celeste64LocationData(
129-
region = "Forsaken City",
130-
address = celeste_64_base_id + 27,
131-
),
132-
LocationName.strawberry_29 : Celeste64LocationData(
133-
region = "Forsaken City",
134-
address = celeste_64_base_id + 28,
135-
),
136-
LocationName.strawberry_30 : Celeste64LocationData(
137-
region = "Forsaken City",
138-
address = celeste_64_base_id + 29,
139-
)
19+
strawberry_location_data_table: Dict[str, Celeste64LocationData] = {
20+
LocationName.strawberry_1: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x00),
21+
LocationName.strawberry_2: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x01),
22+
LocationName.strawberry_3: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x02),
23+
LocationName.strawberry_4: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x03),
24+
LocationName.strawberry_5: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x04),
25+
LocationName.strawberry_6: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x05),
26+
LocationName.strawberry_7: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x06),
27+
LocationName.strawberry_8: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x07),
28+
LocationName.strawberry_9: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x08),
29+
LocationName.strawberry_10: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x09),
30+
LocationName.strawberry_11: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x0A),
31+
LocationName.strawberry_12: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x0B),
32+
LocationName.strawberry_13: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x0C),
33+
LocationName.strawberry_14: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x0D),
34+
LocationName.strawberry_15: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x0E),
35+
LocationName.strawberry_16: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x0F),
36+
LocationName.strawberry_17: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x10),
37+
LocationName.strawberry_18: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x11),
38+
LocationName.strawberry_19: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x12),
39+
LocationName.strawberry_20: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x13),
40+
LocationName.strawberry_21: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x14),
41+
LocationName.strawberry_22: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x15),
42+
LocationName.strawberry_23: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x16),
43+
LocationName.strawberry_24: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x17),
44+
LocationName.strawberry_25: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x18),
45+
LocationName.strawberry_26: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x19),
46+
LocationName.strawberry_27: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x1A),
47+
LocationName.strawberry_28: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x1B),
48+
LocationName.strawberry_29: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x1C),
49+
LocationName.strawberry_30: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x1D),
14050
}
14151

52+
friend_location_data_table: Dict[str, Celeste64LocationData] = {
53+
LocationName.granny_1: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x100 + 0x00),
54+
LocationName.granny_2: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x100 + 0x01),
55+
LocationName.granny_3: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x100 + 0x02),
56+
LocationName.theo_1: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x100 + 0x03),
57+
LocationName.theo_2: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x100 + 0x04),
58+
LocationName.theo_3: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x100 + 0x05),
59+
LocationName.badeline_1: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x100 + 0x06),
60+
LocationName.badeline_2: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x100 + 0x07),
61+
LocationName.badeline_3: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x100 + 0x08),
62+
}
63+
64+
sign_location_data_table: Dict[str, Celeste64LocationData] = {
65+
LocationName.sign_1: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x200 + 0x00),
66+
LocationName.sign_2: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x200 + 0x01),
67+
LocationName.sign_3: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x200 + 0x02),
68+
LocationName.sign_4: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x200 + 0x03),
69+
LocationName.sign_5: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x200 + 0x04),
70+
}
71+
72+
car_location_data_table: Dict[str, Celeste64LocationData] = {
73+
LocationName.car_1: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x300 + 0x00),
74+
LocationName.car_2: Celeste64LocationData("Forsaken City", celeste_64_base_id + 0x300 + 0x01),
75+
}
76+
77+
location_data_table: Dict[str, Celeste64LocationData] = {**strawberry_location_data_table,
78+
**friend_location_data_table,
79+
**sign_location_data_table,
80+
**car_location_data_table}
81+
14282
location_table = {name: data.address for name, data in location_data_table.items() if data.address is not None}

worlds/celeste64/Names/ItemName.py

+6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
strawberry = "Strawberry"
2+
raspberry = "Raspberry"
23

34
dash_refill = "Dash Refills"
45
double_dash_refill = "Double Dash Refills"
@@ -9,3 +10,8 @@
910
traffic_block = "Traffic Blocks"
1011
spring = "Springs"
1112
breakables = "Breakable Blocks"
13+
14+
ground_dash = "Ground Dash"
15+
air_dash = "Air Dash"
16+
skid_jump = "Skid Jump"
17+
climb = "Climb"

worlds/celeste64/Names/LocationName.py

+22
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,25 @@
2929
strawberry_28 = "Feather Arches Cassette Strawberry"
3030
strawberry_29 = "North-East Tower Cassette Strawberry"
3131
strawberry_30 = "Badeline Cassette Strawberry"
32+
33+
# Friend Locations
34+
granny_1 = "Granny Conversation 1"
35+
granny_2 = "Granny Conversation 2"
36+
granny_3 = "Granny Conversation 3"
37+
theo_1 = "Theo Conversation 1"
38+
theo_2 = "Theo Conversation 2"
39+
theo_3 = "Theo Conversation 3"
40+
badeline_1 = "Badeline Conversation 1"
41+
badeline_2 = "Badeline Conversation 2"
42+
badeline_3 = "Badeline Conversation 3"
43+
44+
# Sign Locations
45+
sign_1 = "Camera Sign"
46+
sign_2 = "Skid Jump Sign"
47+
sign_3 = "Dash Jump Sign"
48+
sign_4 = "Lonely Sign"
49+
sign_5 = "Credits Sign"
50+
51+
# Car Locations
52+
car_1 = "Intro Car"
53+
car_2 = "Secret Car"

0 commit comments

Comments
 (0)