wghost81 Posted September 8, 2014 Share Posted September 8, 2014 johnnylump, it does change starting point to one defined inside stream. But yes, those values need to be figured out and changed for every map we want to modify. It was a productive night, but I need to get some sleep. :smile: 1:23 here. :smile: Link to comment Share on other sites More sharing options...
LiQuiD911 Posted September 8, 2014 Share Posted September 8, 2014 LOL , we could actualy have this stuff working before the next long war release xD how are them rookies holding up? Link to comment Share on other sites More sharing options...
johnnylump Posted September 8, 2014 Share Posted September 8, 2014 @Liquid -- you can count on it. No doubt this will be the most significant new feature of B14 if we can get it working. .... @ Ghost (and Liquid too if you can explain it) -- I don't see in the code you posted any reference to spawn locations, so I take it that will be an additional mod section that will need to be added. Sorry, this is how I was with Amineri, too, when she unlocked some major new feature potential -- I can see roughly what's going on and can handle implementation, but I need someone to hold my hand through the first time of getting it working. Link to comment Share on other sites More sharing options...
LiQuiD911 Posted September 8, 2014 Share Posted September 8, 2014 (edited) TheWorld.PersistentLevel.XComSpawnPoint_X is where a pawn pops up ,at the moment I'm trying to figure out why it isn't spawning them.I've already figured how to move the dropzone but my code uses absolute offsets and i still have to learn ghost's style. Idealy , I think we can make exalt missions out of any map. Check a few pages back, I have spammed the thread with posts xD Edited September 8, 2014 by LiQuiD911 Link to comment Share on other sites More sharing options...
dubiousintent Posted September 8, 2014 Share Posted September 8, 2014 (edited) Yeah, you folks are covering new ground so fast it's too confusing and hard to keep straight for those of us not deep in the weeds of the code. Once you have finished working out the essentials we will need a recap that I can then transcribe to the wiki. But we are not there yet. But very exciting to see. :tongue: I know many people are hoping for new maps, or at least variations of the existing ones. -Dubious- Edited September 8, 2014 by dubiousintent Link to comment Share on other sites More sharing options...
LiQuiD911 Posted September 8, 2014 Share Posted September 8, 2014 (edited) wghost, could you please verify this: not all maps accept streaming XcomSpawnPoints. These accept new spawnpointsPolice station,Military Ammo,Hive,Highwayconstruction,Rooftops,Small cemetery,Street Hurricane,Office paper,Liquor store,Fast food,Boulevard,Bar,CommercialStreet while maps like trainyard, trainstation, industrial office,cemetery grand,street overspass do not move the pawns to new locations ( well.. they move a single pawn while the others remain in their default place after applying your patches the entire squad remains in it's default place, I suppose it's related to the group tags).I haven't tested the rest. The spawn point code you sent me works, but I was testing it on street overpass. This moves the Dropzone. This Object code is pure magic!xD Before I was comparing hex values of floats to find the offsets. OBJECT=TheWorld.PersistentLevel.XComLevelActor_1 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<%f xxx> <%f yyy> <%f zzz> // Vector(x,y,z) OBJECT=TheWorld.PersistentLevel.XComBuildingVolume_1 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<%f xxx> <%f yyy> <%f zzz> // Vector(x,y,z) Oddly the Volume rotator doesn't work. However that's not a problem because we can use the Pier_streamB which is very similar to the outpost stream but the dropzone is rotated by 90 degrees OBJECT=TheWorld.PersistentLevel.XComLevelActor_1 FIND_CODE=<Rotation> <StructProperty> <%u 0xC> <%u 0> <Rotator>:END MODDED_CODE=<%f 0> <%f 90> <%f 0> // Rotator (Pitch, Yaw, Roll) OBJECT=TheWorld.PersistentLevel.XComBuildingVolume_1 FIND_CODE=<Rotation> <StructProperty> <%u 0xC> <%u 0> <Rotator>:END MODDED_CODE=<%f 0> <%f 90> <%f 0> // Rotator (Pitch, Yaw, Roll) Edited September 9, 2014 by LiQuiD911 Link to comment Share on other sites More sharing options...
wghost81 Posted September 9, 2014 Share Posted September 9, 2014 Drop zone moved:http://steamcommunity.com/sharedfiles/filedetails/?id=311869706 PatcherGUI code: UPK_FILE=Base_LZ_Mod_Stream_0000000.upk ALIAS=PlayerStart:<%f 2351> <%f 1487> <%f 64> ALIAS=XComBuildingVolume:<%f 2587> <%f 1478> <%f 121> ALIAS=XComLevelActor:<%f 2572> <%f 1498> <%f 27> ALIAS=XComSpawnPoint1:<%f 2156> <%f 1286> <%f 75> ALIAS=XComSpawnPoint2:<%f 2348> <%f 1286> <%f 75> ALIAS=XComSpawnPoint3:<%f 2156> <%f 1670> <%f 75> ALIAS=XComSpawnPoint4:<%f 2060> <%f 1478> <%f 75> ALIAS=XComSpawnPoint5:<%f 2348> <%f 1670> <%f 75> ALIAS=XComSpawnPoint6:<%f 2252> <%f 1478> <%f 75> ALIAS=PointInSpace:<%f 2108> <%f 1238> <%f 27> //ALIAS=PrefabInstance:<%f 2016> <%f -1056> <%f 0> //ALIAS=PlayerRotation:<%i 0> <%i -31328> <%i 0> OBJECT=TheWorld.PersistentLevel.PlayerStart_1 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!PlayerStart> /*FIND_CODE=<Rotation> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!PlayerRotation>*/ OBJECT=TheWorld.PersistentLevel.PointInSpace_1 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!PointInSpace> /*OBJECT=TheWorld.PersistentLevel.PrefabInstance_0 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!PrefabInstance>*/ OBJECT=TheWorld.PersistentLevel.XComBuildingVolume_1 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComBuildingVolume> OBJECT=TheWorld.PersistentLevel.XComLevelActor_1 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComLevelActor> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_10 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint1> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_11 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint2> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_6 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint3> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_7 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint4> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_8 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint5> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_9 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint6> I have a LibreOffice Cals file to re-calculate relative offsets, based on PlayerStart Location. But I think I'll just make an utility for this to avoid too much copy-pasting. I'll test all the maps you mentioned, LiQuiD911 and will report the results. Link to comment Share on other sites More sharing options...
wghost81 Posted September 9, 2014 Share Posted September 9, 2014 Yes, I can confirm that LZ streaming is not working for certain maps. Need to read more about UE level streaming. Anyway, we always have an option to edit maps directly. Or try to move LZ with scripts. Link to comment Share on other sites More sharing options...
wghost81 Posted September 9, 2014 Share Posted September 9, 2014 (edited) Objects we trying to stream have different names for those maps. I tried to rename stream objects to match map objects, but with no luck: still only one unit is moved to new spawn zone. Here's the code to make a new stream from the existing Base_LZ_Mod_Stream_0000000.upk UPK_FILE=Base_LZ_Mod_Stream_0000001.upk RENAME=Base_LZ_Mod_Stream_0000000:Base_LZ_Mod_Stream_0000001 ALIAS=PlayerStart:<%f 1583> <%f 1871> <%f 64> ALIAS=XComBuildingVolume:<%f 1819> <%f 1862> <%f 121> ALIAS=XComLevelActor:<%f 1804> <%f 1882> <%f 27> ALIAS=XComSpawnPoint1:<%f 1388> <%f 1670> <%f 75> ALIAS=XComSpawnPoint2:<%f 1580> <%f 1670> <%f 75> ALIAS=XComSpawnPoint3:<%f 1388> <%f 2054> <%f 75> ALIAS=XComSpawnPoint4:<%f 1292> <%f 1862> <%f 75> ALIAS=XComSpawnPoint5:<%f 1580> <%f 2054> <%f 75> ALIAS=XComSpawnPoint6:<%f 1484> <%f 1862> <%f 75> ALIAS=PointInSpace:<%f 1340> <%f 1622> <%f 27> ALIAS=PrefabInstance:<%f 1340> <%f 1622> <%f 27> //ALIAS=PlayerRotation:<%i 0> <%i -31328> <%i 0> OBJECT=TheWorld.PersistentLevel.PlayerStart_1 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!PlayerStart> /*FIND_CODE=<Rotation> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!PlayerRotation>*/ OBJECT=TheWorld.PersistentLevel.PointInSpace_1 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!PointInSpace> OBJECT=TheWorld.PersistentLevel.PrefabInstance_0 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!PrefabInstance> OBJECT=TheWorld.PersistentLevel.XComBuildingVolume_1 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComBuildingVolume> OBJECT=TheWorld.PersistentLevel.XComLevelActor_1 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComLevelActor> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_10 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint1> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_11 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint2> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_6 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint3> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_7 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint4> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_8 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint5> OBJECT=TheWorld.PersistentLevel.XComSpawnPoint_9 FIND_CODE=<Location> <StructProperty> <%u 0xC> <%u 0> <Vector>:END MODDED_CODE=<!XComSpawnPoint6> EXPORT_ENTRY=TheWorld.PersistentLevel.PrefabInstance_0 FIND_CODE=<PrefabInstance_0> MODDED_CODE=<PrefabInstance_14> EXPORT_ENTRY=TheWorld.PersistentLevel.PointInSpace_1 FIND_CODE=<PointInSpace_1> MODDED_CODE=<PointInSpace_0> EXPORT_ENTRY=TheWorld.PersistentLevel.XComBuildingVolume_1 FIND_CODE=<XComBuildingVolume_1> MODDED_CODE=<XComBuildingVolume_4> EXPORT_ENTRY=TheWorld.PersistentLevel.XComLevelActor_1 FIND_CODE=<XComLevelActor_1> MODDED_CODE=<XComLevelActor_69> EXPORT_ENTRY=TheWorld.PersistentLevel.XComSpawnPoint_10 FIND_CODE=<XComSpawnPoint_10> MODDED_CODE=<XComSpawnPoint_3> EXPORT_ENTRY=TheWorld.PersistentLevel.XComSpawnPoint_11 FIND_CODE=<XComSpawnPoint_11> MODDED_CODE=<XComSpawnPoint_5> Copy Base_LZ_Mod_Stream_0000000.upk to Base_LZ_Mod_Stream_0000001.upk before applying. Edited September 9, 2014 by wghost81 Link to comment Share on other sites More sharing options...
wghost81 Posted September 9, 2014 Share Posted September 9, 2014 (edited) I have successfully moved LZ for TrainStation map using script: UPK_FILE=XComGame.upk ALIAS=PlayerStart:<%f 1583> <%f 1871> <%f 64> ALIAS=XComBuildingVolume:<%f 1819> <%f 1862> <%f 121> ALIAS=XComLevelActor:<%f 1804> <%f 1882> <%f 27> ALIAS=XComSpawnPoint1:<%f 1388> <%f 1670> <%f 75> ALIAS=XComSpawnPoint2:<%f 1580> <%f 1670> <%f 75> ALIAS=XComSpawnPoint3:<%f 1388> <%f 2054> <%f 75> ALIAS=XComSpawnPoint4:<%f 1292> <%f 1862> <%f 75> ALIAS=XComSpawnPoint5:<%f 1580> <%f 2054> <%f 75> ALIAS=XComSpawnPoint6:<%f 1484> <%f 1862> <%f 75> ALIAS=PointInSpace:<%f 1340> <%f 1622> <%f 27> [ADD_EXPORT_ENTRY] <Core.ObjectProperty> // Type <NullRef> // ParentClassRef <XGBattle_SP.PostLevelLoaded> // OwnerRef <A> // NameIdx <NullRef> // ArchetypeRef <% u0x00000000> // flags H <% u0x00070004> // flags L <%u 44> // serial size <%u 0> // serial offset <%u 0> // export flags <%u 0> // net objects count <%u 0> // GUID1 <%u 0> // GUID2 <%u 0> // GUID3 <%u 0> // GUID4 <%u 0> // unknown OBJECT=XGBattle_SP.PostLevelLoaded.A REL_OFFSET=16 // skip PrevObjRef + Empty DefaultProperties List + NextObjRef [MODDED_CODE] <%s 1> // ArrayDim <%s 0> // ElementSize <%u 0x00000000> // flags L <%u 0x00000000> // flags H <None> // CategoryIndex <NullRef> // ArrayEnumRef <Engine.Actor> // OtherObjRef OBJECT=XGBattle_SP.PostLevelLoaded:AUTO [REPLACEMENT_CODE] //super.PostLevelLoaded() 1C <XGBattle.PostLevelLoaded> 16 //FindActorByName('PlayerStart_1', A) 1C <Engine.Actor.FindActorByName> 21 <PlayerStart_1> 00 <.A> 16 //A.Location = vect(x, y, z) 0F 19 00 <.A> 09 00 <Engine.Actor.Location> 00 01 <Engine.Actor.Location> 23 <!PlayerStart> //FindActorByName('PointInSpace_0', A) 1C <Engine.Actor.FindActorByName> 21 <PointInSpace_0> 00 <.A> 16 //A.Location = vect(x, y, z) 0F 19 00 <.A> 09 00 <Engine.Actor.Location> 00 01 <Engine.Actor.Location> 23 <!PointInSpace> //FindActorByName('XComBuildingVolume_4', A) 1C <Engine.Actor.FindActorByName> 21 <XComBuildingVolume_4> 00 <.A> 16 //A.Location = vect(x, y, z) 0F 19 00 <.A> 09 00 <Engine.Actor.Location> 00 01 <Engine.Actor.Location> 23 <!XComBuildingVolume> //FindActorByName('XComLevelActor_69', A) 1C <Engine.Actor.FindActorByName> 21 <XComLevelActor_69> 00 <.A> 16 //A.Location = vect(x, y, z) 0F 19 00 <.A> 09 00 <Engine.Actor.Location> 00 01 <Engine.Actor.Location> 23 <!XComLevelActor> //FindActorByName('XComSpawnPoint_3', A) 1C <Engine.Actor.FindActorByName> 21 <XComSpawnPoint_3> 00 <.A> 16 //A.Location = vect(x, y, z) 0F 19 00 <.A> 09 00 <Engine.Actor.Location> 00 01 <Engine.Actor.Location> 23 <!XComSpawnPoint1> //FindActorByName('XComSpawnPoint_5', A) 1C <Engine.Actor.FindActorByName> 21 <XComSpawnPoint_5> 00 <.A> 16 //A.Location = vect(x, y, z) 0F 19 00 <.A> 09 00 <Engine.Actor.Location> 00 01 <Engine.Actor.Location> 23 <!XComSpawnPoint2> //FindActorByName('XComSpawnPoint_6', A) 1C <Engine.Actor.FindActorByName> 21 <XComSpawnPoint_6> 00 <.A> 16 //A.Location = vect(x, y, z) 0F 19 00 <.A> 09 00 <Engine.Actor.Location> 00 01 <Engine.Actor.Location> 23 <!XComSpawnPoint3> //FindActorByName('XComSpawnPoint_7', A) 1C <Engine.Actor.FindActorByName> 21 <XComSpawnPoint_7> 00 <.A> 16 //A.Location = vect(x, y, z) 0F 19 00 <.A> 09 00 <Engine.Actor.Location> 00 01 <Engine.Actor.Location> 23 <!XComSpawnPoint4> //FindActorByName('XComSpawnPoint_8', A) 1C <Engine.Actor.FindActorByName> 21 <XComSpawnPoint_8> 00 <.A> 16 //A.Location = vect(x, y, z) 0F 19 00 <.A> 09 00 <Engine.Actor.Location> 00 01 <Engine.Actor.Location> 23 <!XComSpawnPoint5> //FindActorByName('XComSpawnPoint_9', A) 1C <Engine.Actor.FindActorByName> 21 <XComSpawnPoint_9> 00 <.A> 16 //A.Location = vect(x, y, z) 0F 19 00 <.A> 09 00 <Engine.Actor.Location> 00 01 <Engine.Actor.Location> 23 <!XComSpawnPoint6> //if(Desc().ShouldSpawnMeldCanisters()) 07 [@NoMeld] 19 1B <Desc> 16 0A 00 <XGBattleDesc.ShouldSpawnMeldCanisters.ReturnValue> 00 1B <ShouldSpawnMeldCanisters> 16 //InitMeldContainers() 1B <InitMeldContainers> 16 [#NoMeld] //InitCapturePoints() 1B <InitCapturePoints> 16 //return 04 0B //EOS 53 Test with original URB_TrainStation map only! This code will mess up starting points for all the other maps, so don't even try a different map with this mod installed! At this point I can tell that we can safely handle LZ relocation inside XGBattle_SP.PostLevelLoaded function. This function is called after levels streaming is complete and before players are initiated, so it's a perfect place to move already loaded map objects. LZ consists of 10 objects. Those objects have different names for different maps. I can find a map object by type and by name from inside a script, but not by archetype. At least, haven't yet found a way to do it. But I'll keep trying. I'm going to add a config variable, which will be exposed in DefaultMaps and will hold LZ center point locations list for each map. If I won't be able to sort objects by archetype, I'd need to expose those 10 object names for editing via config too. Edited September 9, 2014 by wghost81 Link to comment Share on other sites More sharing options...
Recommended Posts