LiQuiD911 Posted September 9, 2014 Share Posted September 9, 2014 (edited) Great work (: However, if we use the XGBattle_SP.PostLevelLoaded function would the the map placement mod be independent of Longwar? I realy don't care about anything not longwar related but others would surely appreciate. About the LZ rotation : there is an alternative for using a different stream, the highlight is rotatable but the volume is not, i could rotate it by moding it's mesh cordinates. So which approach would it be? PierStreamB or volume edit? I checked if the Anna Song stream works in EW, well it doesn't.. the map loads but crashes after I see the lz. I don't think the spawnpoint problem is related to the names.. in the stream they are 6-11, but they work in some maps that have 1-6. ps:sorry If I misspell some words but english isn't my mother tongue and I really don't want to google each word spell xD @johnnylump, I am messing around with other streams too.. it seems we put a hostage/bomb on an abduction missions. An idea : put back the 3 missions on the hologlobe and add make a bomb/hostage for ALL the maps.. well instead of "abductions" we'll have "alien situations" Exalt extraction streams don't work with simple swap of files on abduction because the operative is a regular soldier that doesn't have the hack skill. Exalt capture and holds works too! the aliens go towards the capture point and sectoids drop from choppers :D But there is no operative that can hack 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 (edited) LiQuiD911, rotated LZ example: 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> //A.Rotation = vect(P, Y, R) 0F 19 00 <.A> 09 00 <Engine.Actor.Rotation> 00 01 <Engine.Actor.Rotation> 22 <%i 0> <%i 16384> <%i 0> //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> //A.Rotation = vect(P, Y, R) 0F 19 00 <.A> 09 00 <Engine.Actor.Rotation> 00 01 <Engine.Actor.Rotation> 22 <%i 0> <%i 16384> <%i 0> //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> //A.Rotation = vect(P, Y, R) 0F 19 00 <.A> 09 00 <Engine.Actor.Rotation> 00 01 <Engine.Actor.Rotation> 22 <%i 0> <%i 16384> <%i 0> //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> //A.Rotation = vect(P, Y, R) 0F 19 00 <.A> 09 00 <Engine.Actor.Rotation> 00 01 <Engine.Actor.Rotation> 22 <%i 0> <%i 16384> <%i 0> //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> //A.Rotation = vect(P, Y, R) 0F 19 00 <.A> 09 00 <Engine.Actor.Rotation> 00 01 <Engine.Actor.Rotation> 22 <%i 0> <%i 32064> <%i 0> //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> //A.Rotation = vect(P, Y, R) 0F 19 00 <.A> 09 00 <Engine.Actor.Rotation> 00 01 <Engine.Actor.Rotation> 22 <%i 0> <%i 32064> <%i 0> //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> //A.Rotation = vect(P, Y, R) 0F 19 00 <.A> 09 00 <Engine.Actor.Rotation> 00 01 <Engine.Actor.Rotation> 22 <%i 0> <%i 32064> <%i 0> //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> //A.Rotation = vect(P, Y, R) 0F 19 00 <.A> 09 00 <Engine.Actor.Rotation> 00 01 <Engine.Actor.Rotation> 22 <%i 0> <%i 32064> <%i 0> //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> //A.Rotation = vect(P, Y, R) 0F 19 00 <.A> 09 00 <Engine.Actor.Rotation> 00 01 <Engine.Actor.Rotation> 22 <%i 0> <%i 32064> <%i 0> //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> //A.Rotation = vect(P, Y, R) 0F 19 00 <.A> 09 00 <Engine.Actor.Rotation> 00 01 <Engine.Actor.Rotation> 22 <%i 0> <%i 32064> <%i 0> //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 I'm testing with vanilla currently. Yes, this mod will apply both to vanilla and Long War games. Moving LZ inside script IMO is better, as with 4 different streaming maps you might end up having the same map twice in a row, but with different LZ location. This won't be fun. Potentially, I could also save used LZ positions and choose a new position next time map selection rolls this map. I'm going to expose all 10 objects in config file, because on some of the maps positions might need fine-tuning. And because it will make scripting easier for me. :smile: Config array will look like this:RandomLZArray = (MapName="URB_Bar", CouncilType=eFCMType_None, PlayerStartLocation=(X, Y, Z), PlayerStartRotation=(P, Y, R), ..., XComSpawnPoint6Location=(X, Y, Z), XComSpawnPoint6Rotation=(P, Y, R)) CouncilType will allow to set LZ for abductions and different types of Council missions separately. Don't worry about misspelling, English is not my native language too. :smile: Edited September 9, 2014 by wghost81 Link to comment Share on other sites More sharing options...
LiQuiD911 Posted September 9, 2014 Share Posted September 9, 2014 Awesome (: This got way out of my area of expertise xD I'll poke around the map files to search for other kind of possible alterations. Link to comment Share on other sites More sharing options...
wghost81 Posted September 9, 2014 Share Posted September 9, 2014 (edited) LiQuiD911, you can change almost anything with scripting, but you need to find the right object to change first. :smile: So yes, please, continue your research. Your findings are a major breakthrough in map editing. BTW, now I can see how maps are created in UDK. All those objects are collection of archetypes (objects, sounds, etc), organized in prefabs and placed on maps easily with editor. But after cooking is done, prefabs get useless, although they still persist as map objects (but not actually used), and we need to find and edit all the subobjects of one object manually to move or rotate it. For example, LZ object has 10 such subobjects, which have to be located individually for each map, as they have different names for different maps. Edited September 9, 2014 by wghost81 Link to comment Share on other sites More sharing options...
LiQuiD911 Posted September 9, 2014 Share Posted September 9, 2014 (edited) So, if we want to make new maps we need to reassemble the actors to make new prefabs, It would be a nightmare to go trough all the actors.. CB2_MP_Blank is nearly empty but is full of actors. An important limitation is volume editing... the map floor bounds are specified by static meshes.. we can edit their vertexes but can we insert new ones? If we can crack the actor thing then I suppose map upk become "tilesets" for making new maps.. flat ones without too many floors. Edit: oh and I forgot the nastiest part: particle emmitters, those will be a real pain to edit. By the way, did you manage to hide the default LZ when streams are used? 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 I'm not adding new LZ, I'm moving existing one. Link to comment Share on other sites More sharing options...
LiQuiD911 Posted September 9, 2014 Share Posted September 9, 2014 But the outpost stream places a new one. I end up with the base one and the streamed one (I'm not using your new code) Link to comment Share on other sites More sharing options...
wghost81 Posted September 9, 2014 Share Posted September 9, 2014 (edited) Preparing "clean" stream map: http://forums.nexusmods.com/index.php?/topic/1104408-r-d-xcom-map-alterations/?p=18238944 Do this and then edit LZ location with this: http://forums.nexusmods.com/index.php?/topic/1104408-r-d-xcom-map-alterations/?p=18249424 It will remove original LZ on the maps, which "accept" new streams. On other maps, like TrainStation, it won't. Edited September 9, 2014 by wghost81 Link to comment Share on other sites More sharing options...
LiQuiD911 Posted September 9, 2014 Share Posted September 9, 2014 (edited) I found the elements of a capture and hold streamthe small volume doesn't seem to effect anything, the big volumes have their highlight in them (and triggers too), no other actors needed. The enemy wave file is pretty straightforward. I'm moving to car prefabs. Map Comercial Restaurant CNHdecoderBIGTheWorld.PersistentLevel.XComCapturePointVolume_0decoderSMALLTheWorld.PersistentLevel.XComRebuildWorldDataVolume_9trasmiterBiGTheWorld.PersistentLevel.XComCapturePointVolume_1TheWorld.PersistentLevel.XComRebuildWorldDataVolume_1Extr volumeTheWorld.PersistentLevel.XComBuildingVolume_0Extr highlight actorTheWorld.PersistentLevel.XComLevelActor_0encoder actorTheWorld.PersistentLevel.XComCapturePointActor_14trasmiter actorTheWorld.PersistentLevel.XComCapturePointActor_15array actorsTheWorld.PersistentLevel.XComRadarArrayActor_12TheWorld.PersistentLevel.XComRadarArrayActor_13TheWorld.PersistentLevel.XComRadarArrayActor_14TheWorld.PersistentLevel.XComRadarArrayActor_15 Edited September 9, 2014 by LiQuiD911 Link to comment Share on other sites More sharing options...
johnnylump Posted September 9, 2014 Share Posted September 9, 2014 @ Ghost So the new plan for basic LZ relocation is to leave off streaming files and instead use XComGame script + config settings, and number of config lines will determine number of alternate locations and limit map-repeating issue because they will all be counted as the same map. Works for me. Link to comment Share on other sites More sharing options...
Recommended Posts