LarannKiar Posted January 10 Share Posted January 10 It was in the .exe. Some functions were referenced it but I didn't investigate it. I think it probably used to build the master file. Changes in the .esm might have been made later. Link to comment Share on other sites More sharing options...
aurreth Posted January 11 Share Posted January 11 Trying various combinations, along with the INI settings that seem to be necessary to enable reading from the CSV files, but doesn't seem to do anything. As further evidence, the CSVs list several asteroid belts, and near as I can tell there aren't any in the game. Certainly not one in Sol system, even though that is listed. I don't suppose you can find the function that populates the galaxy map? It is only refreshed at the start of a new game (brand new or NG+), which means having to do a Unity jump every time I need to test something, which is annoying lol But it also means that you can't do custom system mods mid game because they only work for new starts. Link to comment Share on other sites More sharing options...
LarannKiar Posted January 11 Share Posted January 11 That's interesting.. there must be some data flag or something that prevents the galaxy map from refreshing mid-playthrough. Or if there isn't, I'm sure at point BGS will need to add this functionality to the game otherwise they wouldn't be able to release DLCs with a new system. Editing vanilla planet data in the .csv files has no effect either? As for the no-op .ini settings, I've seen quite a few console commands as well related to biomes that didn't seem to do anything. I'll see if I can find something but chances are low.. Link to comment Share on other sites More sharing options...
aurreth Posted January 11 Share Posted January 11 35 minutes ago, LarannKiar said: That's interesting.. there must be some data flag or something that prevents the galaxy map from refreshing mid-playthrough. Or if there isn't, I'm sure at point BGS will need to add this functionality to the game otherwise they wouldn't be able to release DLCs with a new system. Editing vanilla planet data in the .csv files has no effect either? As for the no-op .ini settings, I've seen quite a few console commands as well related to biomes that didn't seem to do anything. I'll see if I can find something but chances are low.. Not sure if it is a data flag or some quest or script that only runs once, at the beginning of the game. Whatever it is that places you at Vectera, either in the mine or in space. Link to comment Share on other sites More sharing options...
LarannKiar Posted January 12 Share Posted January 12 (edited) 23 hours ago, aurreth said: Not sure if it is a data flag or some quest or script that only runs once, at the beginning of the game. Whatever it is that places you at Vectera, either in the mine or in space. The Player Reference 0x14 is created by the .exe when the player starts a new game. In Fallout 4, they used the .ini setting sCharGenQuest:General to let the game code know which is the first quest to start. But someone at BGS decided to create Default Objects for every.. well.. many things so now we have a DFOB StartupQuest_DO that points to MQ101 "One Small Step" [QUST:00003448]. The MQ may MoveTo the player to the elevator in the mine on Vectera, I don't know. As for Game.CreateStarbornGame(), that seems to create an almost entirely new game. Basides the player's appearance and base info, a very few Actor Values are carried over (StarbornSaveActorValuesDO [DFOB:0015F47A]) and maybe some other things I don't know about. By the way, there's an ancient (+10 years old) native function even exposed to the console "RevertWorld" which technically should revert all player made changes and restore the save's "vanilla state". The function is broken (like ever), cannot restore the save properly. I can't blame the developers for not fixing it, seems like an almost impossible task.. but still, opening the ability to save forms (SpaceshipReferences if I may...) basides Actor Values could do miracles.. for modding at least if they didn't have any ideas. Would save plenty of hours of reverse engineering the game code trying to reconstruct every data structure involved to "transfer" forms between saves. But that's another topic. Back to custom planets.. you mentioned earlier the galaxy map "is only updated at the start of the game". Does it mean the custom system you made only shows up "at all" if you start a new game after activating its .esm plugin? I'm not saying I can't beleive it but if BGS really baked the galaxy map data to save games the "game files/resource" situation is much worse than I thought.. I miss .bgsm files. Edited January 12 by LarannKiar Link to comment Share on other sites More sharing options...
aurreth Posted January 12 Share Posted January 12 1 hour ago, LarannKiar said: The Player Reference 0x14 is created by the .exe when the player starts a new game. In Fallout 4, they used the .ini setting sCharGenQuest:General to let the game code know which is the first quest to start. But someone at BGS decided to create Default Objects for every.. well.. many things so now we have a DFOB StartupQuest_DO that points to MQ101 "One Small Step" [QUST:00003448]. The MQ may MoveTo the player to the elevator in the mine on Vectera, I don't know. As for Game.CreateStarbornGame(), that seems to create an almost entirely new game. Basides the player's appearance and base info, a very few Actor Values are carried over (StarbornSaveActorValuesDO [DFOB:0015F47A]) and maybe some other things I don't know about. By the way, there's an ancient (+10 years old) native function even exposed to the console "RevertWorld" which technically should revert all player made changes and restore the save's "vanilla state". The function is broken (like ever), cannot restore the save properly. I can't blame the developers for not fixing it, seems like an almost impossible task.. but still, opening the ability to save forms (SpaceshipReferences if I may...) basides Actor Values could do miracles.. for modding at least if they didn't have any ideas. Would save plenty of hours of reverse engineering the game code trying to reconstruct every data structure involved to "transfer" forms between saves. But that's another topic. Back to custom planets.. you mentioned earlier the galaxy map "is only updated at the start of the game". Does it mean the custom system you made only shows up "at all" if you start a new game after activating its .esm plugin? I'm not saying I can't beleive it but if BGS really baked the galaxy map data to save games the "game files/resource" situation is much worse than I thought.. I miss .bgsm files. MQ101 does indeed move the player to either the starting cell or to the spaceship, depending on whether the value of PlayerUnityTimesEntered. I was looking at it for a map initialization earlier and noticed that was in there. Yes, the galaxy map is populated at the start of the game. If I create a new system ESM, with new, not existing, FormIDs, that system will not appear if you load the mod after the game has started. If you start a new game, including a new NG+ run, the system will show up on the map. I have a "new" one planet, one moon system, new FormIDs, in my game right now, but I had to NG+ to get the game to recognize it. If I load that same ESM during a currently running game it will not show up on the map. Instead the new system will be placed at 0,0,0, which is Sol. You may be able to click on Sol and get a "menu" that shows Sol and a blank entry (the way you can click on Alpha Centauri and get to pick either Alpha or Toliman), but if that shows up you can't actually choose the blank entry. You receive an "Unknown Error" notification. Most of the time you can't even get the blank: all the star names disappear and you have to back out to try again. If that is happening you can't travel to Sol using the map (you may still be able to set a course using the quest log, I haven't tried that). So, the new system is picked up by the game either way, but you can only see it and get to it if you load the ESM prior to starting a new game/NG+. That goes for planets too. I've tried adding them but it doesn't work. Now, more strangeness. You can move a star system by changing the star's coordinates, and that will show in an existing game. Anything you do to an existing system, move it, rename it, whatever will get picked up. You have to have the various name fields correct though, or you will duplicate stars or planets. You end up turning a system into a binary, but both choices go to exactly the same place. You can end up with two Earths, but if you build an outpost on one it will appear on the other as well, and any changes you make to one will show up on the other. They aren't separate stars or planets, the map just tells you they are. And it's not intuitive, you don't just change all instances of "Earth" to "Counter Earth", or you get the duplicate effect. If I remember right you change two of the three name values between the planet record and the location record. I'd have to look it up in one of my earlier experiments. In summary, once you start the game the list of stars and planets is fixed. Start a new game or NG+ and that list is updated. So there is a function or quest or something at the start that reads all the stars and planets and populates the galaxy. One more thing. There is a location, "Universe", that, well, doesn't seem to do anything. All the other space locations are children of Universe. My test system has one star, one planet, one moon. The moons location record would be SStar_PPlanet_MMoon, which is a child of SStar_PPlanet, which is a child of SStar, which is a child of Universe. Universe is referenced by all star location records, but not by anything else. It may be that the map function is looking at Universe and then following the tree down, but I can't find any references to it in any of the quests. Link to comment Share on other sites More sharing options...
LarannKiar Posted January 12 Share Posted January 12 (edited) 3 hours ago, aurreth said: MQ101 does indeed move the player to either the starting cell or to the spaceship, depending on whether the value of PlayerUnityTimesEntered. I was looking at it for a map initialization earlier and noticed that was in there. Yes, the galaxy map is populated at the start of the game. If I create a new system ESM, with new, not existing, FormIDs, that system will not appear if you load the mod after the game has started. If you start a new game, including a new NG+ run, the system will show up on the map. I have a "new" one planet, one moon system, new FormIDs, in my game right now, but I had to NG+ to get the game to recognize it. If I load that same ESM during a currently running game it will not show up on the map. Instead the new system will be placed at 0,0,0, which is Sol. You may be able to click on Sol and get a "menu" that shows Sol and a blank entry (the way you can click on Alpha Centauri and get to pick either Alpha or Toliman), but if that shows up you can't actually choose the blank entry. You receive an "Unknown Error" notification. Most of the time you can't even get the blank: all the star names disappear and you have to back out to try again. If that is happening you can't travel to Sol using the map (you may still be able to set a course using the quest log, I haven't tried that). So, the new system is picked up by the game either way, but you can only see it and get to it if you load the ESM prior to starting a new game/NG+. That goes for planets too. I've tried adding them but it doesn't work. Now, more strangeness. You can move a star system by changing the star's coordinates, and that will show in an existing game. Anything you do to an existing system, move it, rename it, whatever will get picked up. You have to have the various name fields correct though, or you will duplicate stars or planets. You end up turning a system into a binary, but both choices go to exactly the same place. You can end up with two Earths, but if you build an outpost on one it will appear on the other as well, and any changes you make to one will show up on the other. They aren't separate stars or planets, the map just tells you they are. And it's not intuitive, you don't just change all instances of "Earth" to "Counter Earth", or you get the duplicate effect. If I remember right you change two of the three name values between the planet record and the location record. I'd have to look it up in one of my earlier experiments. In summary, once you start the game the list of stars and planets is fixed. Start a new game or NG+ and that list is updated. So there is a function or quest or something at the start that reads all the stars and planets and populates the galaxy. One more thing. There is a location, "Universe", that, well, doesn't seem to do anything. All the other space locations are children of Universe. My test system has one star, one planet, one moon. The moons location record would be SStar_PPlanet_MMoon, which is a child of SStar_PPlanet, which is a child of SStar, which is a child of Universe. Universe is referenced by all star location records, but not by anything else. It may be that the map function is looking at Universe and then following the tree down, but I can't find any references to it in any of the quests. For this project, if you haven't already, you can enable planet content and story manager logging. EnableStoryManagerLogging setini "bEnableSpeechChallengeLogging:General" 1 setini "bEnablePlanetContentManagerLogging:Planet" 1 setini "bEnableConditionLogging:General" 1 setini "bEnableStoryManagerLogging:General" 1 setini "iStoryManagerLoggingEvent:General" 1 PlanetContentManager.0.log: [15:05:51] PlanetContentManager log opened (PC-64) [15:05:51] *** New request (seed: 3644822250) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [0, 0] & position [0.00, 0.00, 0.00] (dist: 0.00m) *** [15:05:51] + Branch selecting child node [15:05:51] + Branch selecting child node [15:05:52] > Successful content result: PCMGenericLandingOverlay [15:05:52] *** New request (seed: 3644822250) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [0, 0] & position [0.00, 0.00, 0.00] (dist: 0.00m) *** [15:05:52] + Branch selecting child node [15:05:52] + Branch selecting child node [15:05:52] > Successful content result: PCMGenericLandingOverlay [15:05:52] *** New request (seed: 2571458658) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [-1, -1] & position [-100.00, -100.00, 0.00] (dist: 0.00m) *** [15:05:52] + Branch selecting child node [15:05:52] + Branch selecting child node [15:05:52] > Successful content result: LandingOverlay01 [15:05:52] *** New request (seed: 2798497843) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [-1, 0] & position [-100.00, 0.00, 0.00] (dist: 0.00m) *** [15:05:52] + Branch selecting child node [15:05:52] + Branch selecting child node [15:05:52] > Successful content result: LandingOverlay05 [15:05:52] *** New request (seed: 1002590533) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [-1, 1] & position [-100.00, 100.00, 0.00] (dist: 0.00m) *** [15:05:52] + Branch selecting child node [15:05:52] + Branch selecting child node [15:05:52] > Successful content result: LandingOverlay03 [15:05:52] *** New request (seed: 1222634282) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [1, -1] & position [100.00, -100.00, 0.00] (dist: 0.00m) *** [15:05:57] > Successful content result: [15:05:57] *** New request (seed: 1467347501) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [5, -15] & position [504.00, -1435.00, 5.17] (dist: 1538.52m) *** [15:05:57] + Branch selecting child node [15:05:57] + Node failed Conditions validation [15:05:57] + Node failed Conditions validation [15:05:57] + Branch selecting child node [15:05:57] + Node failed Conditions validation [15:05:57] (Branch failed with no validated child node) Edited January 12 by LarannKiar Link to comment Share on other sites More sharing options...
aurreth Posted January 12 Share Posted January 12 1 minute ago, LarannKiar said: For this project, if you haven't already, you can enable planet content and story manager logging. PlanetContentManager.0.log: Hide contents [15:05:51] PlanetContentManager log opened (PC-64) [15:05:51] *** New request (seed: 3644822250) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [0, 0] & position [0.00, 0.00, 0.00] (dist: 0.00m) *** [15:05:51] + Branch selecting child node [15:05:51] + Branch selecting child node [15:05:52] > Successful content result: PCMGenericLandingOverlay [15:05:52] *** New request (seed: 3644822250) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [0, 0] & position [0.00, 0.00, 0.00] (dist: 0.00m) *** [15:05:52] + Branch selecting child node [15:05:52] + Branch selecting child node [15:05:52] > Successful content result: PCMGenericLandingOverlay [15:05:52] *** New request (seed: 2571458658) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [-1, -1] & position [-100.00, -100.00, 0.00] (dist: 0.00m) *** [15:05:52] + Branch selecting child node [15:05:52] + Branch selecting child node [15:05:52] > Successful content result: LandingOverlay01 [15:05:52] *** New request (seed: 2798497843) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [-1, 0] & position [-100.00, 0.00, 0.00] (dist: 0.00m) *** [15:05:52] + Branch selecting child node [15:05:52] + Branch selecting child node [15:05:52] > Successful content result: LandingOverlay05 [15:05:52] *** New request (seed: 1002590533) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [-1, 1] & position [-100.00, 100.00, 0.00] (dist: 0.00m) *** [15:05:52] + Branch selecting child node [15:05:52] + Branch selecting child node [15:05:52] > Successful content result: LandingOverlay03 [15:05:52] *** New request (seed: 1222634282) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [1, -1] & position [100.00, -100.00, 0.00] (dist: 0.00m) *** [15:05:57] > Successful content result: [15:05:57] *** New request (seed: 1467347501) for 'Gagarin' (Biome: WetlandsLife01) on tree at coord [5, -15] & position [504.00, -1435.00, 5.17] (dist: 1538.52m) *** [15:05:57] + Branch selecting child node [15:05:57] + Node failed Conditions validation [15:05:57] + Node failed Conditions validation [15:05:57] + Branch selecting child node [15:05:57] + Node failed Conditions validation [15:05:57] (Branch failed with no validated child node) Hide contents StoryManager.0.log: Reveal hidden contents [14:59:03] StoryManager log opened (PC-64) [14:59:03] Started processing event 0000071E: On Actor Attach - Location: [FF00519C],Actor : [FF00469A] [14:59:03] -Node 'On Actor Attach' passed [14:59:03] Finished process event. [14:59:03] Started processing event 0000071F: On Actor Attach - Location: BlueprintExteriorConstellation_Frontier_TemplateLocationClonedLocation0100ABA9_000000001 [01100684],Actor : [FF001E16] [14:59:03] -Node 'On Actor Attach' passed [14:59:03] Finished process event. [14:59:03] Started processing event 00000720: On Actor Attach - Location: BlueprintExteriorConstellation_Frontier_TemplateLocationClonedLocation0100ABA9_000000001 [01100684],Actor : [FF009B2C] [14:59:03] -Node 'On Actor Attach' passed [14:59:03] Finished process event. [14:59:03] Started processing event 00000721: Location Loaded - Location: CityNewAtlantisLocation [0001295A] [14:59:03] -Node 'Location Loaded' passed [14:59:03] --Node '' passed [14:59:03] ---Node '' passed [14:59:03] ---Node '' failed conditions [14:59:03] Finished process event. [14:59:03] Started processing event 00000722: Location Loaded - Location: Universe [0001A53A] [14:59:03] -Node 'Location Loaded' passed [14:59:03] --Node '' passed [14:59:03] ---Node '' passed [14:59:03] ---Node '' failed conditions [14:59:03] Finished process event. [15:01:30] Started processing event 00000748: Script Event - Keyword: SQ_PlayerShipTakeoffEvent [000914E3],Location: nullptr,Ref 1: Frontier_ModularREF [0003F7E8],Ref 2: NewAtlantisShipLandingMarker [00023605],Value 1: 0,Value 2: 0 [15:01:30] -Node 'Script Event' passed [15:01:30] --Node '' failed conditions [15:01:30] --Node '' failed conditions [15:01:30] --Node '' failed conditions [15:01:30] --Node '' failed conditions [15:01:30] --Node '' failed conditions [15:01:30] --Node '' passed [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ----Node '' has reached its maximum number of running quests (5 - set by node '') [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ----Node '' has reached its maximum number of running quests (1 - set by node '') [15:01:30] ----Node '' has reached its maximum number of running quests (3 - set by node '') [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ----Node '' has reached its maximum number of running quests (1 - set by node '') [15:01:30] --Node '' failed conditions [15:01:30] --Node '' passed [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] ----Node '' failed conditions [15:01:30] ----Node '' failed conditions [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] --Node '' passed [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] --Node '' passed [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] --Node '' passed [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' passed [15:01:30] ----Quest 'SQ_ShipTechniciansTakeoff' failed to fill aliases [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] ----Node '' failed conditions [15:01:30] ----Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] --Node '' passed [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] ---Node '' failed conditions [15:01:30] --Node '' passed [15:01:30] ---Node '' passed [15:01:30] ----Node '' failed conditions [15:01:30] --Node '' failed conditions [15:01:30] Finished process event. INI Settings: EnableStoryManagerLogging setini "bEnableSpeechChallengeLogging:General" 1 setini "bEnablePlanetContentManagerLogging:Planet" 1 setini "bEnableConditionLogging:General" 1 setini "bEnableStoryManagerLogging:General" 1 setini "iStoryManagerLoggingEvent:General" 1 Cool, I'll give that a go and see what I get. Thanks. Link to comment Share on other sites More sharing options...
aurreth Posted January 12 Share Posted January 12 Thousands of lines of [17:35:27] Generator reset: 1118964073 [17:35:27] Generator reset: 2264654208 [17:35:27] Generator reset: 1478348156 [17:35:27] Generator reset: 1803206043 [17:35:27] Generator reset: 1803206043 [17:35:27] Generator reset: 3111324113 [17:35:27] Generator reset: 612165799 [17:35:27] Generator reset: 1478348156 [17:35:27] Generator reset: 3306302474 Link to comment Share on other sites More sharing options...
LarannKiar Posted January 13 Share Posted January 13 (edited) 2 hours ago, aurreth said: Thousands of lines of [17:35:27] Generator reset: 1118964073 [17:35:27] Generator reset: 2264654208 [17:35:27] Generator reset: 1478348156 [17:35:27] Generator reset: 1803206043 [17:35:27] Generator reset: 1803206043 [17:35:27] Generator reset: 3111324113 [17:35:27] Generator reset: 612165799 [17:35:27] Generator reset: 1478348156 [17:35:27] Generator reset: 3306302474 On one occasion that reset is called after a "PCM_SEED", I guess the content generator. Those are seed values? By the way, I decoded about a hundred of form data flags of all kinds of forms like "REFR_WORKSHOP_BULLDOZED" and "CELL_DETACHTIME" recently. (Should be all that exist but I'm not sure yet). I may make an SFSE plugin later to simply return them in a string array.. hopefully they'll help with making sense of the latest design choices. Now I'm trying to get the save game loader to output load process info. The save handler has a built-in code to analyze and dump all info about the save it tries to load. I hooked up my custom .json (BGS uses nlohmann::json as well; I just knew it was fitting for the game :), the code accepts it but it refuses to flush the output file in the end for some reason.. I'll probably need to improve the syntax of the .json. Edited January 13 by LarannKiar Link to comment Share on other sites More sharing options...
Recommended Posts