@@ -83,13 +83,13 @@ def __init__(
8383 if self ._apply_fn is not None :
8484 try :
8585 value = self ._apply_fn (value )
86- except : # noqa
86+ except Exception as err :
8787 raise ValueError (
8888 "Basic game plugin from {} has an invalid {} property." .format (
8989 game ._fromName , # pyright: ignore[reportPrivateUsage]
9090 self ._exposed_name ,
9191 )
92- )
92+ ) from err
9393 self ._default = lambda game : value # type: ignore
9494 elif default is not None :
9595 self ._default = default # type: ignore
@@ -360,19 +360,6 @@ def ids_apply(v: list[int] | list[str] | int | str) -> list[str]:
360360 )
361361
362362
363- _GameFeature = (
364- mobase .BSAInvalidation
365- | mobase .DataArchives
366- | mobase .GamePlugins
367- | mobase .LocalSavegames
368- | mobase .ModDataChecker
369- | mobase .ModDataContent
370- | mobase .SaveGameInfo
371- | mobase .ScriptExtender
372- | mobase .UnmanagedMods
373- )
374-
375-
376363class BasicGame (mobase .IPluginGame ):
377364 """This class implements some methods from mobase.IPluginGame
378365 to make it easier to create game plugins without having to implement
@@ -408,20 +395,19 @@ def setup():
408395 # Path to the game, as set by MO2:
409396 _gamePath : str
410397
411- # The feature map:
412- _featureMap : dict [type [_GameFeature ], _GameFeature ]
413-
414398 def __init__ (self ):
415399 super (BasicGame , self ).__init__ ()
416400
417401 if not hasattr (self , "_fromName" ):
418402 self ._fromName = self .__class__ .__name__
419403
420404 self ._gamePath = ""
421- self ._featureMap = {}
422405
423406 self ._mappings : BasicGameMappings = BasicGameMappings (self )
424407
408+ def _register_feature (self , feature : mobase .GameFeature ) -> bool :
409+ return self ._organizer .gameFeatures ().registerFeature (self , feature , 0 , True )
410+
425411 # Specific to BasicGame:
426412 def is_steam (self ) -> bool :
427413 return self ._mappings .steamAPPId .has_value ()
@@ -442,7 +428,9 @@ def is_eadesktop(self) -> bool:
442428
443429 def init (self , organizer : mobase .IOrganizer ) -> bool :
444430 self ._organizer = organizer
445- self ._featureMap [mobase .SaveGameInfo ] = BasicGameSaveGameInfo ()
431+
432+ self ._register_feature (BasicGameSaveGameInfo ())
433+
446434 if self ._mappings .originWatcherExecutables .get ():
447435 from .origin_utils import OriginWatcher
448436
@@ -655,6 +643,3 @@ def documentsDirectory(self) -> QDir:
655643
656644 def savesDirectory (self ) -> QDir :
657645 return self ._mappings .savesDirectory .get ()
658-
659- def _featureList (self ):
660- return self ._featureMap
0 commit comments