1
1
# pylint: disable=missing-class-docstring, missing-module-docstring, fixme
2
2
from copy import deepcopy
3
+ from typing import List
3
4
4
5
from BaseClasses import Item , ItemClassification , MultiWorld , Tutorial
5
6
from worlds .AutoWorld import WebWorld , World
10
11
CelesteItemType ,
11
12
CelesteLocationFactory ,
12
13
)
13
- from .options import celeste_options , get_option_value
14
+ from .options import VictoryConditionEnum , celeste_options , get_option_value
14
15
from .regions import CelesteRegionFactory
15
16
16
17
@@ -39,19 +40,36 @@ class CelesteWorld(World):
39
40
topology_present = True
40
41
web = CelesteWebWorld ()
41
42
43
+ victory_condition : VictoryConditionEnum
44
+ completion_level : int
45
+
42
46
item_factory : CelesteItemFactory
43
47
location_factory : CelesteLocationFactory
44
48
region_factory : CelesteRegionFactory
45
49
46
50
item_name_to_id = CelesteItemFactory .get_name_to_id ()
47
51
location_name_to_id = CelesteLocationFactory .get_name_to_id ()
48
52
53
+ required_client_version = (0 , 4 , 3 )
54
+
49
55
def __init__ (self , multiworld : MultiWorld , player : int ):
50
56
super ().__init__ (multiworld , player )
57
+ self .completion_level = 10
51
58
self .item_factory = CelesteItemFactory (self )
52
59
self .location_factory = CelesteLocationFactory ()
53
60
self .region_factory = CelesteRegionFactory ()
54
61
62
+ def generate_early (self ) -> None :
63
+ self .victory_condition = VictoryConditionEnum (
64
+ get_option_value (self .multiworld , self .player , "victory_condition" )
65
+ )
66
+ if self .victory_condition == VictoryConditionEnum .CHAPTER_9_FAREWELL :
67
+ self .completion_level = 10
68
+ elif self .victory_condition == VictoryConditionEnum .CHAPTER_8_CORE :
69
+ self .completion_level = 9
70
+ elif self .victory_condition == VictoryConditionEnum .CHAPTER_7_SUMMIT :
71
+ self .completion_level = 7
72
+
55
73
def create_item (self , name : str ) -> Item :
56
74
return self .item_factory .create_item (name )
57
75
@@ -62,6 +80,10 @@ def create_items(self):
62
80
item_table = self .item_factory .get_table (self )
63
81
64
82
for item in item_table :
83
+ if item .level > self .completion_level :
84
+ continue
85
+ if item .level == self .completion_level and item .side == 0 and item .item_type == CelesteItemType .COMPLETION :
86
+ continue
65
87
self .multiworld .itempool .append (deepcopy (item ))
66
88
67
89
self .item_name_groups = {
@@ -72,10 +94,17 @@ def create_items(self):
72
94
}
73
95
74
96
def generate_basic (self ) -> None :
75
- self .multiworld .get_location ( "Level 10 A-Side Complete" , self . player ). place_locked_item (
76
- CelesteItem ( "Victory" , ItemClassification . progression , None , self .player , CelesteItemType . COMPLETION , 10 , 0 )
97
+ self .multiworld .completion_condition [ self . player ] = lambda state : state . has (
98
+ f"Level { self . completion_level } A-Side Complete" , self .player
77
99
)
78
- self .multiworld .completion_condition [self .player ] = lambda state : state .has ("Victory" , self .player )
100
+
101
+ def pre_fill (self ):
102
+ item_table = self .item_factory .get_table (self )
103
+ for item in item_table :
104
+ if item .level > self .completion_level or (
105
+ item .level == self .completion_level and item .side == 0 and item .item_type == CelesteItemType .COMPLETION
106
+ ):
107
+ self .multiworld .get_location (item .name , self .player ).place_locked_item (deepcopy (item ))
79
108
80
109
def fill_slot_data (self ):
81
110
slot_data = {}
0 commit comments