Jump to content

R&D XCOM Map Alterations


Amineri

Recommended Posts

  • Replies 473
  • Created
  • Last Reply

Top Posters In This Topic

About moving the pickup in CB2_MP_Blank :

 

I can move the main actor of the pickup, it relocates the model which can be destroyed, dealing damage around the new location.However it doesn't move the cover, in fact pawns can walk trough it. The initial location has cover, blocks vision and contains the shadow ( could it be baked it the texture?). When the pickup explodes it leaves the hull which oddly provides cover!

TheWorld.PersistentLevel.XComDestructibleActor_0

This actor contains the windows of the car
TheWorld.PersistentLevel.XComFracLevelActor_0

 

UE explorer provides more information than upk unpack on the mesh file

VEH_PickupTruckB.Meshes.PickUpB.RB_BodySetup_3

 

 

 

begin object name=RB_BodySetup_3 class=RB_BodySetup
PreCachedPhysDataVersion=34079889
AggGeom=(BoxElems=/* Array type was not detected. */,TM=(XPlane=(X=0.0,Y=0.0,Z=0.0,W=-1.0),YPlane=(X=0.0,Y=0.0,Z=0.99999990,W=0.0),ZPlane=(X=0.0,Y=0.99999990,Z=0.0,W=0.0),WPlane=(X=1.0,Y=0.60572810,Z=-1.9781340,W=47.739940)),X=95.479870,Y=362.56870,Z=159.36520)
object end
// Reference: RB_BodySetup'VEH_PickupTruckB.Meshes.PickUpB.RB_BodySetup_3'

 

 

 

the last XYZ contains part of the the colision box for the 3d engine

@ghost, how can I refer to those 3 values int the patch tool?

the tools don't give me any aditional information.. where could the initial cover/vision be located?

Link to comment
Share on other sites

DeserializeAll can't read beyond DefaultProperties for most of the map actors ATM.

 

LiQuiD911, you can use FIND_CODE to search for those numbers:

FIND_CODE=<%f 95.479870> <%f 362.56870> <%f 159.36520>
MODDED_CODE=/*new values here*/
But as floating-point representation is not always accurate, patcher might end up finding nothing. You could also export this object binary data into separate file with UE Explorer or FindObjectEntry, locate those numbers with HxD and determine their relative offset.

 

Working with objects of unknown structure is a pain, I know. :smile:

Edited by wghost81
Link to comment
Share on other sites

....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"

 

*THIS* is also what i meant by another similar post in LW (Features & Suggestions) too.

 

Mine revolved around having to provide a choice between three different locations (Cities or sub-urbans areas created specifically in the INI lists for such stuff) in the same Country as the first item... etc! You can read more about this (custom) principle here; http://forums.nexusmods.com/index.php?/topic/1210174-long-war-feature-requests-and-suggestions/?p=18171309

 

Strictly speaking, it multiplies the probabilities of "Mission types" and allocates a complex path to decisions. It's a supplemental layer to gameplay while sticking the story flow far beyond the currently restricted span of events.

Having alternate Trooper "operatives" on monitoring duties would be Icing on the cake.

 

Code-wise it might be a pain -- but just imagine the players' gain. ;)

 

:ninja:!! :cool:

Link to comment
Share on other sites

 

 

I can move the main actor of the pickup, it relocates the model which can be destroyed, dealing damage around the new location.However it doesn't move the cover, in fact pawns can walk trough it. The initial location has cover, blocks vision and contains the shadow ( could it be baked it the texture?). When the pickup explodes it leaves the hull which oddly provides cover!

 

I just would like to remark that moving a truck is an accomplishment worthy of note.

Link to comment
Share on other sites

Bit of a bad news here.

 

I can add a very complex structures to package, but I can't make those to initialize properly via config.

 

Example:

struct MapObjData
{
	var name Obj;
	var Vector Loc;
	var Rotator Rot;
};

struct RandLZData
{
	var string MapName;
	var XGGameData.EFCMissionType CouncilType;
	var MapObjData MapObj[10];
};

var config array<config RandLZData> RandLZ;
I've added this to XComGameInfo and added new config entry:

[XComGame.XComTacticalGame]
.RandLZ=( MapName="URB_Bar", CouncilType=eFCMType_None, MapObj[0]=( Obj="PlayerStart_2", Loc=( X=0, Y=0, Z=0 ), Rot=( Pitch=0, Yaw=0, Roll=0 ) ), MapObj[1]=( Obj="XComBuildingVolume_6", Loc=( X=0, Y=0, Z=0 ), Rot=( Pitch=0, Yaw=0, Roll=0 ) ), MapObj[2]=( Obj="XComLevelActor_6", Loc=( X=0, Y=0, Z=0 ), Rot=( Pitch=0, Yaw=0, Roll=0 ) ), MapObj[3]=( Obj="PointInSpace_22", Loc=( X=0, Y=0, Z=0 ), Rot=( Pitch=0, Yaw=0, Roll=0 ) ), MapObj[4]=( Obj="XComSpawnPoint_22", Loc=( X=0, Y=0, Z=0 ), Rot=( Pitch=0, Yaw=0, Roll=0 ) ), MapObj[5]=( Obj="XComSpawnPoint_23", Loc=( X=0, Y=0, Z=0 ), Rot=( Pitch=0, Yaw=0, Roll=0 ) ), MapObj[6]=( Obj="XComSpawnPoint_18", Loc=( X=0, Y=0, Z=0 ), Rot=( Pitch=0, Yaw=0, Roll=0 ) ), MapObj[7]=( Obj="XComSpawnPoint_19", Loc=( X=0, Y=0, Z=0 ), Rot=( Pitch=0, Yaw=0, Roll=0 ) ), MapObj[8]=( Obj="XComSpawnPoint_20", Loc=( X=0, Y=0, Z=0 ), Rot=( Pitch=0, Yaw=0, Roll=0 ) ), MapObj[9]=( Obj="XComSpawnPoint_21", Loc=( X=0, Y=0, Z=0 ), Rot=( Pitch=0, Yaw=0, Roll=0 ) ) )
RandLZ object can be accessed. It even has 1 element added. But all the values are empty.

 

Good thing is, simple configurable arrays do work:

var config array<config string> PlayerStartMap;
...
[XComGame.XComTacticalGame]
.PlayerStartMap="URB_Bar"
We can try to initialize data using DefaultProperties, but doing this manually will take forever. I'm going to investigate UDK possibility, but this will take some time.

 

Still, we can use streams for maps which allow streaming and we can create a copies of the other maps and edit LZ coordinates directly. We should also try to figure out why some maps won't accept streamed LZ data.

Link to comment
Share on other sites

I was wondering if you were going to be able to create new working config variables, because we hadn't had any luck doing so.

 

But instead of throwing out this method, why not get a little more hacky and repurpose existing config variables, as we've done a bunch of times in LW. There are some dynamic arrays that would seem to allow for open-ended configurations, which would be a lot easier to modify for a given modder over whole new streaming files (and would save Long War the trouble of adding a bunch of new files to its install).

 

What's the minimum number of variables you need for a single alternate start location? I can think of 5, maybe 6?

1) Which Map

2) X

3) Y

4) Z

5) Rotation of LZ

6) Some kind of direction indicator where XCOM pawn 1 should go; the other pawns can be placed off of this. And this may not be necessary if based on 1 through 4.

 

Yes, this means we can't do drop points away from LZ (although we might be able to encode something along those lines), but it still solves the basic problem.

 

EDIT: If necessary, you could even pack variables into fewer numbers.

Edited by johnnylump
Link to comment
Share on other sites

Now I am absolutely sure that shadows cast by objects are part of the textures,even if we manage to move map objects,the result won't be very pretty. Block view/ block path/cover objects are nowhere to be found ... even on a map with only a van,a pickup and a wall. I have a hunch that they might be in TheWorld.PersistentLevel ,it's a big file which cointains in the start a list of object names ,then followed by a shedload of floats but I cannot find a clear structure in it.

 

Has anyone seen a structure like this?

 

 

http://i59.tinypic.com/5m0lt2.jpg

 

 

 

And it goes on and on.. I don't think it's a 3d model because of the list of objects in the start.

 

@zyxplsilon, wokring with streams requires almost no moding experience, anyone could hexedit the locations objects of vip/trasmitter and encoder/arrays, as it is documented in the thread. You could always make a mod compattable with b13, for the future versions it all depends on how wghost implements the lz movement.

 

That REPLACE_ALL occurences command might come in handy :D (of course it is not a priority atm )I would like to check if those are prefab variables or not.

Edited by LiQuiD911
Link to comment
Share on other sites

I had created new config variables before for mutator enabler, so it is doable. Most of those classes are native, this could be a source of a problem.

 

I can pack all variables into one long string and then parse that string. But it will take quite a time to write such a code in hex.

 

BTW, I found out how SeqAct_RemoveActor actually works: it tries to delete exact actor if it exists, if not - it uses Tag property to delete all actors with given Tag.

 

For Research Outpost map all the LZ objects have Tag=deleteme. Green abduction things are also marked with this tag, they get replaced by Special green things taken from map stream. This means we can't actually use those maps to stream LZ data, as we can't remove those new objects.

 

The most reliable way to create new LZ ATM is to make a copy of existing map and change LZ location.

 

I want to emphasize, that we can and we will randomize LZ placement. Important thing is: we know what objects we should look for, so it's just a matter of time to figure out an optimal way to work with those.

Edited by wghost81
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...