wghost81 Posted May 7, 2015 Share Posted May 7, 2015 Normaly I play with the "show postprocessing" off, revealing the entire map and boosting fps on my laptop but I can see the sectoid pods because they have a webbed abductee with them(it disapears when they trigger). Does anybody know where should I poke to remove the abductee? Abduction pods have webbed abductee spawned at the center of the pod's location. It is spawned by the script during the deployment phase. There probably is some kismet event, like on spawn or something, to track it down. Thanks for the test map, I'll check it out. If we'll make it work, we could prevent meld from blocking doors and ladders by placing no-spawn volumes appropriately. Link to comment Share on other sites More sharing options...
LiQuiD911 Posted May 8, 2015 Share Posted May 8, 2015 Of course we could use a new type of volume, the xcom no spawn volume can block civvies and or aliens too. I think only sectoids have the abductee.. Probably it's even visible through the fog of war if the camera is tilted in the right angle. Link to comment Share on other sites More sharing options...
wghost81 Posted May 8, 2015 Share Posted May 8, 2015 (edited) Yes, you're right, we can create our own volume. I do remember abductees are spawned for abduction pods, but I can't say for sure if this is tied in to pod's species. Needs checking. I've finished coding a simple mutator for adding new bomb missions. Will release it after some additional tests. Edited May 8, 2015 by wghost81 Link to comment Share on other sites More sharing options...
LiQuiD911 Posted May 11, 2015 Share Posted May 11, 2015 (edited) I think I found the code responsible for spawning abductees for secoids and thinmen, its in XComAlienPod. Removing CenterpieceMesh.SetStaticMesh(FoggedBodyMesh); should do the trick I suppose simulated event PostBeginPlay(){ local StaticMesh FoggedBodyMesh; super(Actor).PostBeginPlay(); FoggedBodyMesh = StaticMesh(XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).GetGameContent("CHH_FoggedMaleCivs.Meshes.CivAlienPod")); CenterpieceMesh.SetStaticMesh(FoggedBodyMesh); //return; } Also, I have in mind a method to hide nodes/bomb/meld pods until a unit has sight on the spot where they stand. This will prevent getting hints by tilting the camera and scanning the map. My proof of concept did not work because the it needs aditional tuning expained bellow Here's my idea: Hide all nodes and their particlesPlace a marker 96x96x96 volume on each node, place a XComSquadVisiblePoint on each node XComSquadVisiblePoint trigger a global event when seen by a unit An event listener waits for the event, when triggered it gets the instigator (the actor which triggered it), we search for the marker volume which contains the instigator (the XComSquadVisiblePoint), then we search for the node which is contained in that volume and make it visible The problem here is that XComSquadVisiblePoint triggers the event but does not set itself as the instigator, probably it would be required to code our own SquadVisiblePoint which does. I think I might pull this off with a kismet map patch, but each map with meld/bomb would required it Edited May 11, 2015 by LiQuiD911 Link to comment Share on other sites More sharing options...
LiQuiD911 Posted May 12, 2015 Share Posted May 12, 2015 (edited) Got it :smile: here's a patch which hides the nodes/bomb/meld until they are seen by a unit. Works in LW with the random meld/bomb. https://www.dropbox.com/s/w53azoo4p2j3e44/patch_hide_randomized_objects.upk?dl=0 It's still experimental, the bomb does not always show when it's on a corner next to a wall.. actualy the bomb sighted dialogue does not trigger too, there's a problem with the Xcomsquadvisiblepoint I would recommend adding buttons/UI to LW to toggle devconsole commands "toggleFOW" and "show postprocessing", it's a different experience playing with one of those enabled, the maps have beautiful details totally hidden by the fog Edited May 13, 2015 by LiQuiD911 Link to comment Share on other sites More sharing options...
Zyxpsilon Posted May 12, 2015 Share Posted May 12, 2015 Gosh -- i also could really-very-absolutely use some sort of dedicated DevConsole(+ Enhanced) access via easy to reach "Buttons".Just that "Show post-processing" hints me about a precious development feature that could have made my life sooooooooooo much easier when scanning for UI elements and other items of interests that show up on as many different screens and under various conditions.ID tags, textures... SHOW + STAT + VIEWMODE + TOGGLE "X" (etc) are already efficient, i know... but, modding is a monster of his own in certain aspects. Heck, even the "LOG" is not rationally intuitive and can't actually be accessed when we need it the most -- at runtime! :) Link to comment Share on other sites More sharing options...
LiQuiD911 Posted May 13, 2015 Share Posted May 13, 2015 (edited) I really intended that for normal users which don't use devconsole, I type my dev commands at startup. @wghost, I think I managed to fix the squadvisiblepoint problem, by switching off the LOS blocking of the bomb actor (which is buggy by default, it only provides los blocking when it's near wall and not in the open, a while ago I did some testing) and raising the z of it's squadvisiblepoint by 64.. now my squadvisiblepoint triggers , but the bomb sighted does not always trigger on close quarters maps like the slaughter house. The bomb timer probably should start at 4 or 5 due the extra difficulty What's the maximum number of meld pods? The patch works for up to 15 bomb nodes, 5 meld pods and 1 bomb, but i can easily add more update:now the patch also hides the unactivated pod abductee (which moves along with the pod and is visible through the fog of war). I think only sectoids and thinmen had it. Also, I'm getting NetIndex errors because of all my incremental modifications to the UDK classes, it seems that the streaming map technique isn't perfect as I thought. It's fixable by recooking all the patches together but it's going to be problematic when multiple sources start edithing those.. anyone who wants to code his own udk classes will have to use a unique class package Edited May 13, 2015 by LiQuiD911 Link to comment Share on other sites More sharing options...
wghost81 Posted May 14, 2015 Share Posted May 14, 2015 In vanilla you can't have more than 2 meld canisters per map and in LW this number goes up to 3. By editing the script and using meld placement mutator one can spawn as many canisters as they want. :) I was a little busy with my real life work lately, so I was unable to test any of your patches yet. Although the idea looks great. I'm using uncooked scripts and afaik LW assets package also is uncooked. Can you do the same thing with map files? Link to comment Share on other sites More sharing options...
LiQuiD911 Posted May 14, 2015 Share Posted May 14, 2015 If I distribute uncooked files I'll have to also bundle the script packages which I edit frequently. I can give you all the script sources if you want to make a mutator instead of using a streaming map. One more thing, I place all the extra volumes and my squad visible point on the map and then move them around, spawning them only when needed would be a better solution. Here's a link with the uncooked patch and script packageshttps://www.dropbox.com/sh/qowavvpkvfkp004/AAAIz7E5bdBCJXLiUvUPwLria?dl=0 And some of the sources, the rest is kismet and and objects with particular tags to filter themSome of these use a "wait for battle running" kismet widget, DynamicVolume is a simple volume I made ( It does not have any code in it) /******************************************************************************* * XComSquadVisiblePoint generated by Eliot.UELib using UE Explorer. * Eliot.UELib ? 2009-2013 Eliot van Uytfanghe. All rights reserved. * http://eliotvu.com * * All rights belong to their respective owners. *******************************************************************************/class SquadVisiblePoint extends Actor hidecategories(Navigation) placeable;var export editinline SpriteComponent VisualizeSprite;simulated event PostBeginPlay(){ SetTickIsDisabled(false); //return; }simulated event Tick(float dt){ local int I; local float fDistance; local XGSquad kSquad; local XGUnit kUnit; local DynamicVolume containtingVolume; local Actor curActor; super.Tick(dt); if(XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle != none) { kSquad = XGBattle_SP(XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle).GetHumanPlayer().GetSquad(); if(kSquad != none) { I = 0; while(I < kSquad.GetNumMembers()) { kUnit = kSquad.GetMemberAt(I); if((!kUnit.IsDead() && !kUnit.m_bOffTheBattlefield) && !kUnit.IsCriticallyWounded()) { if(class'XComWorldData'.static.GetWorldData().CanSeeActorToLocation(kUnit.GetPawn(), Location)) { fDistance = float(kUnit.GetSightRadius() * 64); // End:0x41E if(VSizeSq(kUnit.GetLocation() - Location) < (fDistance * fDistance) ) { foreach class'Engine'.static.GetCurrentWorldInfo().AllActors(class'DynamicVolume', containtingVolume) { if(containtingVolume.Encompasses(self)) break; } foreach class'Engine'.static.GetCurrentWorldInfo().AllActors(class'Actor', curActor) { if( ( containtingVolume.IsOverlapping(curActor) &&( curActor.ObjectArchetype.Name == 'ARC_AlienEnergyNode_XLA' || curActor.ObjectArchetype.Name == 'ARC_AlienBomb_XLA' || curActor.IsA('XComMeldContainerActor') ) ) || ( containtingVolume.Encompasses(curActor) &&( curActor.ObjectArchetype.Name == 'ARC_Alien_Bomb_Active' || curActor.ObjectArchetype.Name == 'ARC_Alien_Bomb_Exploding' || curActor.ObjectArchetype.Name == 'ARC_Alien_Bomb_Destroyed' || curActor.ObjectArchetype.Name == 'ARC_Alien_Bomb_Inactive' || curActor.ObjectArchetype.Name == 'ARC_Energy_Node_Active' || curActor.ObjectArchetype.Name == 'ARC_Energy_Node_Inactive') ) ) { curActor.SetHidden(false); } } SetTickIsDisabled(true); break; } } } ++ I; } } } //return; }defaultproperties{ begin object name=Sprite class=SpriteComponent end object VisualizeSprite=Sprite Components(0)=Sprite } class SeqAct_ToggleHide extends SequenceAction hidecategories(Object) forcescriptorder(true);var() bool Hidden;var() Actor Target;event Activated(){ Target.SetHidden(Hidden); ActivateOutputLink(0);}defaultproperties{ bCallHandler=false VariableLinks(0)=(ExpectedType=Class'Engine.SeqVar_Object',LinkDesc="Actor",PropertyName=Target) ObjName="Toggle Hidden"} /******************************************************************************* * SeqAct_RemoveActor generated by Eliot.UELib using UE Explorer. * Eliot.UELib ? 2009-2013 Eliot van Uytfanghe. All rights reserved. * http://eliotvu.com * * All rights belong to their respective owners. *******************************************************************************/class SeqAct_SetLOSBlocking extends SequenceAction hidecategories(Object) forcescriptorder(true);var() Actor Target;var() bool bBlockUnitVisibility;event Activated(){ if ( Target.IsA( 'XComLevelActor') ) { XComLevelActor(Target).VisibilityBlockingData.bBlockUnitVisibility = bBlockUnitVisibility; } else if (Target.IsA('XComFracLevelActor')) { XComFracLevelActor(Target).VisibilityBlockingData.bBlockUnitVisibility = bBlockUnitVisibility; XComFracLevelActor(Target).bAlwaysConsiderForCover = false; XComFracLevelActor(Target).bIgnoreForCover = false; //XComFracLevelActor(Target).bCanClimbOver = false; //XComFracLevelActor(Target).bCanClimbOnto = false; // Target.bCanStepUpOn = false; //XComFracLevelActor(Target).CoverForceFlag = CoverForce_Default; } ActivateOutputLink(0);}defaultproperties{ bCallHandler=false VariableLinks(0)=(ExpectedType=Class'Engine.SeqVar_Object',LinkDesc="XComLevelActor",PropertyName=Target,bWriteable=true) ObjName="Set LOS Blocking"} class SeqAct_HidePodAbductees extends SequenceAction hidecategories(Object) forcescriptorder(true); event Activated(){ local XComAlienPod curActor; foreach class'Engine'.static.GetCurrentWorldInfo().AllActors(class'XComAlienPod', curActor) { curActor.m_bShowCenterpiece = false; curActor.HidePodBody(); } ActivateOutputLink(0);}defaultproperties{ ObjName="Hide Pod Abductees" InputLinks(0)=(LinkDesc="In") OutputLinks(0)=(LinkDesc="Out") VariableLinks.Empty} Link to comment Share on other sites More sharing options...
wghost81 Posted May 15, 2015 Share Posted May 15, 2015 (edited) I don't know if mutator will work better in this situation. BTW, you can try spawning objects with kismet. Edited May 15, 2015 by wghost81 Link to comment Share on other sites More sharing options...
Recommended Posts