- DataIO is a class that helps with fallback detection for MetaEngines.
- To prepare it for being included in the executable, get rid of unneeded engine dependencies & headers.
- A utility function is being used from util.cpp, simply prepare a static copy in fileio.cpp
- Leave a comment saying a copy is being used in util.cpp.
- Move AGOSGameDescription -> detection.h
- Move obsoleteGameIDsTable -> obsolete.h
- Both the above points are because the detection needs them, as well as the engine.
- By moving to headers in this pattern, we avoid many unnecessary inclusions and keep everything clean.
- Include it in intern.h, so everything functions normally.
- However, now we can include detection-related things from intern.h in other files, without including unnecessary things.
- Also makes it match other engine conventions.
- Engine files get a copy of detection_enums, while metaengine & detection.cpp get a copy of detection.h as well as detection_enums.
- Entire code was located in the main sword2.cpp file.
- Seperate detection-related code to detection.cpp
- Seperate other MetaEngineConnect related code to metaengine.cpp
- detection.h serves common code between the above files
- A enum value has been copied from sword2.h into the detection TU to avoid duplicate copy
- the detection.h has static function definitions for detecting games.
- This is because metaengine.cpp includes it & detection.cpp does as well.
- If we keep the methods as static, we can truely seperate out everything detection related.
- Move detection code used by createInstance & MetaEngine to a common header - detection_internal.h
- Move steam-related method & table to detection_steam.h
- More info in comments.
- Also, we remove the static keyword so other TU's can use the functions defined.
- This change has a catch.
- Because creating an instance depends on game detection code from detection.cpp, we cannot exclude it from Scumm.
- For Statically linked Scumm, we can simply exclude these detection files, because they're already being built.
- For dynamically linked Scumm, we can add it to our executable.
- Thus, for dynamically linked Scumm, one catch is that we have duplicated code (detection.o in our executable, as well as scumm.dll), but that shouldn't be a big problem considering the advantage it gives us: Detection without a plugin loading.
- MetaEngineConnect requires these at compile time.
- In order to avoid including everything from detect_tables, we just move the one thing we need into header, and include that in metaengine.cpp
- Also include it in detection_tables.h to restore orignal functionality.
- These structs are necessary for detection, as well as the engine itself.
- So, we move it to a common header file, include it once in both the files.
- This way, we won't have to include agi.h inside detection translation unit, which saves us much junk code going into the executable.
- Detection related code, and the class MetaEngine lives in detection.cpp
- Things which require the engine to be loaded, are in metaengine.cpp - the relevant class is called MetaEngineConnect.
- Update modules for the necessary changes.