Jump to content


Photo

DataRun Project


  • Please log in to reply
221 replies to this topic

#21 ambershee

ambershee

    Nimbusfish Rawks

  • Hosted
  • 3,114 posts
  • Location:Derby, UK
  • Projects:Mutator Week & Unreal 3 Projects
  •  Mad Mod Boffin

Posted 15 May 2008 - 09:41 AM

Looking good. I'm going to try and wrap up my experiments with the 'Dynamic Evil' system this weekend, and hopefully move on to the Dynamic bill-board system :)

#22 xiongmao

xiongmao
  • Members
  • 175 posts
  • Location:Paris

Posted 15 May 2008 - 10:11 AM

Great :)
I also improved the secondary fire, the Grapple, I'll add a new video tonight ^^.
I 've used PHYS_Falling instead of PHYS_Flying, it looks much better. I'll add some elasticity factor. The player velocity or acceleration will depends on the distance between him and the carrier (Far = Great Acceleration), I'll also add some "exit impulse" according to player acceleration to allow jump between carriers or anything else :)

#23 ambershee

ambershee

    Nimbusfish Rawks

  • Hosted
  • 3,114 posts
  • Location:Derby, UK
  • Projects:Mutator Week & Unreal 3 Projects
  •  Mad Mod Boffin

Posted 15 May 2008 - 10:44 AM

Sounds brilliant to me. If you have a copy of Quake 3, you could try to find a mod called CorkScrew - I'm suddenly reminded of how ridiculously awesome it was to play online. It featured an optional 'Tarzan Swing' grapple hook that might be worth looking at. It's open source too.

Also, can people please ensure that the subversion repository is kept up to date, it would be useful to have an up to date version as so I can merge my working copy as soon as possible :)

Edit:

Here's some insight into the current DynamicEvil system. When I'm finished, it will affect not only certain specific static meshes (currently the skydome) and the post processing, but also billboards, the player and any enemies. This means that pretty much the entire visual feel of the game is determined directly by how successful the player is. Which is a whole new level of awesome, in my opinion.

A dynamically evil static mesh - I think billboards may or may not be derived from this class; although it's possible they'll need their own evil system.
class DR_DynamicEvilMesh extends StaticMeshActor;

var MaterialInstanceConstant EvilMaterial;

function SetEvil(float Evil, int MaterialIndex)
{
	EvilMaterial = StaticMeshComponent.CreateAndSetMaterialInstanceConstant( MaterialIndex );
	EvilMaterial.SetScalarParameterValue('Evil', Evil);
}

DefaultProperties
{
}

A whole pile of crap in the game mode. I added two exec functions so that testers can test the maximum and minimum settings in their level.
class DR_Game extends UTGame
	config(DataRun);

var array < DR_DynamicEvilMesh > DynamicEvilMeshes;
var array<Actor> out_Actors;

var CustomCharData PlayerData;
var Material PlayerMaterial;

var PostProcessSettings DefaultSettings, CurrentSettings;

auto State PendingMatch
{
	function BeginState(Name PreviousStateName)
	{
		`log("PendingMatch Begin");

		FindEvil();
		
		DefaultSettings = WorldInfo.DefaultPostProcessSettings;
		SetBasePostProcessSettings(false, none);
		
		StartMatch();
	}
}

exec function SetBasePostProcessSettings(bool SetNow, DR_Pawn DRPawn)
{
	DefaultSettings.Scene_Shadows.X = 0.0f;
	DefaultSettings.Scene_Shadows.Y = 0.0f;
	DefaultSettings.Scene_Shadows.Z = 0.0f;
	
	DefaultSettings.Scene_HighLights.X = 0.5f;
	DefaultSettings.Scene_HighLights.Y = 0.5f;
	DefaultSettings.Scene_HighLights.Z = 0.5f;

	DefaultSettings.Scene_Midtones.X = 1.0f;
	DefaultSettings.Scene_Midtones.Y = 1.0f;
	DefaultSettings.Scene_Midtones.Z = 1.0f;

	DefaultSettings.Bloom_Scale = 1.0f;
	
	if (SetNow == true)
	{
		LocalPlayer(PlayerController(DRPawn.Controller).Player).bOverridePostProcessSettings = true;
		LocalPlayer(PlayerController(DRPawn.Controller).Player).PostProcessSettingsOverride = DefaultSettings;
	}
}

exec function SetEvilPostProcessSetting(bool SetNow, DR_Pawn Pawn)
{
	CurrentSettings.Scene_Shadows.X = 0.03f;
	CurrentSettings.Scene_Shadows.Y = 0.03f;
	CurrentSettings.Scene_Shadows.Z = 0.03f;
	
	CurrentSettings.Scene_HighLights.X = 1.5f;
	CurrentSettings.Scene_HighLights.Y = 2.0f;
	CurrentSettings.Scene_HighLights.Z = 1.5f;

	CurrentSettings.Scene_Midtones.X = 1.5f;
	CurrentSettings.Scene_Midtones.Y = 1.5f;
	CurrentSettings.Scene_Midtones.Z = 1.5f;

	CurrentSettings.Bloom_Scale = 0.0f;

	if (SetNow == true)
	{
		LocalPlayer(PlayerController(DRPawn.Controller).Player).bOverridePostProcessSettings = true;
		LocalPlayer(PlayerController(DRPawn.Controller).Player).PostProcessSettingsOverride = CurrentSettings;
	}
}

function RestartPlayer(Controller aPlayer)
{
	super.RestartPlayer(aPlayer);
	
	if(PlayerController(aPlayer) != None)
	{
		PlayerController(aPlayer).SetCameraMode('ThirdPerson');

		DR_Pawn(aPlayer.Pawn).SetSkin(PlayerMaterial);
		DR_Pawn(aPlayer.Pawn).SetEvil();
		UTPlayerReplicationInfo(aPlayer.PlayerReplicationInfo).SetCharacterData(PlayerData);
		
		SetBasePostProcessSettings(true, DR_Pawn(aPlayer.Pawn));
	}
}

//Before the game begins, create an array of all meshes that dynamically change material with player health.
simulated function FindEvil()
{
	local int i;
	
	if ( FindActorsOfClass(class'DataRun.DR_DynamicEvilMesh', out_Actors))
	{
		for (i = 0; i < out_Actors.Length; i++)
		{
			DynamicEvilMeshes[i] = DR_DynamicEvilMesh(out_Actors[i]);
		}
	}
}

DefaultProperties
{
	PlayerData=(BasedOnCharID="C",FamilyID="TWIM",HeadID="A",HelmetID="A",FacemaskID="A",GogglesID="A",TorsoID="A",ShoPadID="A",bHasLeftShoPad=true,bHasRightShoPad=true,ArmsID="A",ThighsID="C",BootsID="A")
	PlayerMaterial=Material'SomePackage.AMateral'
}

Some more stuff in the pawn!

class DR_Pawn extends UTPawn;

var MaterialInstanceConstant EvilMaterial;

event TakeDamage(int Damage, Controller InstigatedBy, vector HitLocation, vector Momentum, class<DamageType> DamageType, optional TraceHitInfo HitInfo, optional Actor DamageCauser)
{
	if(isTimerStarted)
	{
		Super.TakeDamage(Damage, InstigatedBy, HitLocation, Momentum, DamageType, HitInfo, DamageCauser);
		CheckEvil();
	}
}

function PlayHit(float Damage, Controller InstigatedBy, vector HitLocation, class<DamageType> damageType, vector Momentum, TraceHitInfo HitInfo)
{
	if (damageType != class'DR_DmgTypeConsume')
	{
		Super.PlayHit(Damage, InstigatedBy, HitLocation, damageType, Momentum, HitInfo);
	}
}

function CheckEvil()
{
	local int i;
	
	if (Health >= 100)
	{
		Evil = 0;
	}
	else
	{
		Evil = (Health / 100);
	}
	
	for (i = 0; i < DR_Game(WorldInfo.Game).DynamicEvilMeshes.Length; i++)
	{
		DR_Game(WorldInfo.Game).DynamicEvilMeshes[i].SetEvil(Evil, 0);
	}
	
	SetEvil();
}

function SetEvil()
{
	local LocalPlayer LocalPlayer;
	local PostProcessSettings DefaultReference;
	
	DefaultReference = DR_Game(WorldInfo.Game).DefaultSettings;
	
	EvilMaterial = Mesh.CreateAndSetMaterialInstanceConstant(0);
	EvilMaterial.SetScalarParameterValue('Evil', Evil);
	
	LocalPlayer = LocalPlayer(PlayerController(Controller).Player);
	LocalPlayer.bOverridePostProcessSettings = true;
	
	if (Health >= 100)
	{
		DR_Game(WorldInfo.Game).SetBasePostProcessSettings(true, self);
	}
	else
	{
		DefaultReference.Bloom_Scale = Health / 100;
		
		DefaultReference.Scene_Shadows.X = ( (100 - Health) * 0.3f );
		DefaultReference.Scene_Shadows.Y = ( (100 - Health) * 0.3f );
		DefaultReference.Scene_Shadows.Z = ( (100 - Health) * 0.3f );

		DefaultReference.Scene_HighLights.X = ( (100 - Health) + 0.5f );
		DefaultReference.Scene_HighLights.Y = ( ( (100 - Health) * 1.5f ) + 0.5f );
		DefaultReference.Scene_HighLights.Z =  ( (100 - Health) + 0.5f );

		DefaultReference.Scene_Midtones.X = ( (50 - (Health * 0.5f) ) +1.f );
		DefaultReference.Scene_Midtones.Y = ( (50 - (Health * 0.5f) ) +1.f );
		DefaultReference.Scene_Midtones.Z = ( (50 - (Health * 0.5f) ) +1.f );
		
		DR_Game(WorldInfo.Game).CurrentSettings = DefaultReference;
	}
}



Still needs an awful lot of work :(

Edited by ambershee, 15 May 2008 - 04:07 PM.
COOOOOEEEED!!!!111


#24 xiongmao

xiongmao
  • Members
  • 175 posts
  • Location:Paris

Posted 17 May 2008 - 01:53 PM

I've some doubts in changing enemies color, but the other actors is a great idea. I like visual thing, do you have any picture of the sky ?
I've worked a bit on the link tool here is a new video (another one I know :p) Here
I 'm facing some problem with "release impulse", I'm increasing player velocity on Z axis such as Jump Behavior but the player is still falling as usual :wink_new:, there's also a weird behavior when player reaches the suspended volume, it's like he is jumping all the time ^^

Edited by xiongmao, 17 May 2008 - 04:54 PM.


#25 ambershee

ambershee

    Nimbusfish Rawks

  • Hosted
  • 3,114 posts
  • Location:Derby, UK
  • Projects:Mutator Week & Unreal 3 Projects
  •  Mad Mod Boffin

Posted 19 May 2008 - 09:30 AM

Took a look at it, it's not bad. The player seems to get pulled towards it an awful lot. We probably want to reduce the pull as much as possible, to make it more of a swing (effectively limiting the player movement vertically). If we can get that right, we shouldn't need to add extra velocity when the player lets go; the player should acquire it as he moves using the grapple naturally, and we may be able to augment that a little with the handle elasticity. This is all a bit theoretical though, I'm not sure how your current implementation works. I assume the suspended volume is essentially 'the carrier'?

#26 xiongmao

xiongmao
  • Members
  • 175 posts
  • Location:Paris

Posted 19 May 2008 - 08:29 PM

Swing is really painful !!! I'll upload soon with the current working behavior, we can work on this later.
I've got another surprise for you, I've made a little modification of redeemer allfire => YAV ( Yet Another Video ) :)

here is the simple code
The redeemer
class DataRun_Redeemer extends UTWeap_Redeemer_Content;

defaultproperties
{
  WarHeadClass=class'DataRun_UTRemoteRedeemer'
}

The redeemer vehicle
class DataRun_UTRemoteRedeemer extends UTRemoteRedeemer_Content;

var int distanceBehind;
var float angle;

reliable client function ClientSetCameraEffect(Controller C, bool bEnabled)
{
}

simulated function bool CalcCamera( float fDeltaTime, out vector out_CamLoc, out rotator out_CamRot, out float out_FOV )
{
	GetActorEyesViewPoint(out_CamLoc, out_CamRot);
	out_CamRot.Pitch -= angle;
	out_CamLoc -=  vector(out_CamRot) * distanceBehind;
	return true;
}

defaultproperties
{
	distanceBehind = 300;
	angle =  5000 //~7.6°
 	Begin Object name=TrailComponent
		bOwnerNoSee=false
		SecondsBeforeInactive=1.0f
	End Object
	Trail=TrailComponent
	Components.Add(TrailComponent)
}

Simple isn't it ? :p

Ps: this dev helped me in correcting CameraVolume where I use location vector instead of rotation to make the camera movement ;)

Edited by xiongmao, 19 May 2008 - 08:31 PM.


#27 ambershee

ambershee

    Nimbusfish Rawks

  • Hosted
  • 3,114 posts
  • Location:Derby, UK
  • Projects:Mutator Week & Unreal 3 Projects
  •  Mad Mod Boffin

Posted 20 May 2008 - 10:19 AM

Had a look at it, looks like the rocket is pretty much spot on :p

Good to know it helped fix a bug with the camera too.

#28 knighteyes

knighteyes
  • Members
  • 21 posts

Posted 21 May 2008 - 03:08 PM

Hi boys!!
I see you've been really busy last weeks.
I've been away for a long time, but I'm back and I'd like to give you a hand. You all know I have little experience with Uscript but I want to learn and work with you on this.
I have to read some more posts to be up to date, are you having virtual meetings or something?
I'll try to catch up with you, drop a line to know where to start studying/working/helping.

cheers

#29 xiongmao

xiongmao
  • Members
  • 175 posts
  • Location:Paris

Posted 21 May 2008 - 03:28 PM

Welcome back :p
Check out DataRun Wiki (first post of this thread) and let me know what you're interested in. I've code' snippet covering 70% of all coding features.
Meeting (probably through Msn) will take place soon.

#30 knighteyes

knighteyes
  • Members
  • 21 posts

Posted 21 May 2008 - 03:34 PM

Welcome back :p
Check out DataRun Wiki (first post of this thread) and let me know what you're interested in. I've code' snippet covering 70% of all coding features.
Meeting (probably through Msn) will take place soon.


ok, I'll check that.

#31 ambershee

ambershee

    Nimbusfish Rawks

  • Hosted
  • 3,114 posts
  • Location:Derby, UK
  • Projects:Mutator Week & Unreal 3 Projects
  •  Mad Mod Boffin

Posted 21 May 2008 - 04:54 PM

Just as soon as I can get my damned home connection up and running again :p

#32 xiongmao

xiongmao
  • Members
  • 175 posts
  • Location:Paris

Posted 22 May 2008 - 11:28 PM

Hi all,
I've begun Kismet Events and Actions implementation. I 'm facing some problems with setting variable in action :p
Here is the code I've written so far:

In CorruptDataSegment
state healed
{
   function BeginState(Name PreviousStateName)
   {
	  notifyCorruptDataSegmentHealed();
   }

   function notifyCorruptDataSegmentHealed()
   {
	  local int i;
	  local DataRun_SeqEvent_CorruptDataHealed healedEvent;

	  for (i = 0; i < GeneratedEvents.length; i++)
	  {
		 healedEvent = DataRun_SeqEvent_CorruptDataHealed(GeneratedEvents[i]);
		 if (healedEvent != None)
		 {
			healedEvent.NotifyCorruptDataHealed('Healed', self);
		 }
	  }
   }
}
defaultproperties
{
  SupportedEvents(4) = class'DataRun_SeqEvent_CorruptDataHealed'
}

the healEvent
class DataRun_SeqEvent_CorruptDataHealed extends SequenceEvent;

function NotifyCorruptDataHealed(name EventType, DataRun_CorruptDataSegment DR_CRS)
{
	local array<int> ActivateIndices;
	local int i;
	local SeqVar_Object ObjVar;

	for (i = 0; i < OutputLinks.length; i++)
		if (EventType == name(OutputLinks[i].LinkDesc))
			ActivateIndices[ActivateIndices.length] = i;

	if (ActivateIndices.length == 0)
		ScriptLog("Not activating" @ self @ "for event" @ EventType @ "because there are no matching outputs");
	else if (CheckActivate(Originator, DR_CRS, false, ActivateIndices))
	{
		   foreach LinkedVariables(class'SeqVar_Object', ObjVar, "CorruptData")
	   {
			ObjVar.SetObjectValue(DR_CRS);
	   		}
	  }
}

defaultproperties
{
   bPlayerOnly=False
   OutputLinks(0)=(LinkDesc="Healed")
   ObjClassVersion=2
   MaxTriggerCount=0
   ObjName="Healded"
   ObjCategory="CorruptDataSegment"
}

The firewallOpen action
class DataRun_SeqAct_FireWallOpen extends SequenceAction;

var Object CorruptData;

event Activated()
{
	local DataRun_CorruptDataSegment C;
	local int i;

	if(CorruptData == none)
		C = none;
	else if(CorruptData.IsA('DataRun_CorruptDataSegment'))
		C = DataRun_CorruptDataSegment(CorruptData);

	LogInternal("object "$CorruptData);
	LogInternal("CorruptDataSegment: "$C.corruptDataTagName);


	if(InputLinks[0].bHasImpulse)
	{
		for(i=0; i<Targets.length; i++)
			if(Targets[i].IsA('DataRun_FireWall'))
				DataRun_FireWall(targets[i]).BreakCable();
	}
}

defaultproperties
{
   bCallHandler=false
   ObjName="FireWallOpen"
   ObjCategory="FireWallOpen"
   InputLinks(0)=(LinkDesc="OpenWall")
   VariableLinks(1)=(ExpectedType=class'Engine.SeqVar_Object',LinkDesc="CorruptData",PropertyName=CorruptData,MinVars=1,MaxVars=1)
}

Kismet View
Posted Image
Posted Image

the following lines shoud set the corruptDatasegment healed to the action activated but my Log in the action is desperatly None, although the activation is allright.
foreach LinkedVariables(class'SeqVar_Object', ObjVar, "CorruptData")
	   {
			ObjVar.SetObjectValue(DR_CRS);
	   		}

Ps: My current DataRun_FireWall is based on UTBreakablePowerCables, I think it's a good start for that Actor :)

Edited by xiongmao, 22 May 2008 - 11:31 PM.


#33 ambershee

ambershee

    Nimbusfish Rawks

  • Hosted
  • 3,114 posts
  • Location:Derby, UK
  • Projects:Mutator Week & Unreal 3 Projects
  •  Mad Mod Boffin

Posted 23 May 2008 - 11:15 AM

I'm working on the health pickups at the moment; making sure they have a proper appearance and we have easily usable versions for each variation. Shouldn't take too long apart from my itch to do some superfunky materials. Should have it by the end of today if all goes well.

I'm going to post some screenshots later of the dynamically evil sky with accompanying post-processing, as I'm sure you're all eager to get a gander. I spent a lot of time making the sky transition smoothly from bright and blue, to dark, moody and evil, and it's pretty sweet. It's getting it's own thread.

#34 ambershee

ambershee

    Nimbusfish Rawks

  • Hosted
  • 3,114 posts
  • Location:Derby, UK
  • Projects:Mutator Week & Unreal 3 Projects
  •  Mad Mod Boffin

Posted 23 May 2008 - 12:17 PM

Time pickups - left to right:

+5 seconds, +15 seconds, +30 seconds, +60 seconds

Posted Image

#35 Darknet

Darknet
  • Members
  • 75 posts

Posted 24 May 2008 - 02:14 AM

Here some some weapon that I made. Still working on them a bit. The Weapon is bit big and fat in odd in design. X.x

Posted Image
Posted Image
Posted Image
Posted Image
Posted Image

I needed to take a break from modeling a buildings and other stuff. I will resume retexturing the mesh objects. If you guys want some weapon just tell me.
JP - Darknet

#36 xiongmao

xiongmao
  • Members
  • 175 posts
  • Location:Paris

Posted 26 May 2008 - 06:09 PM

Nice Start :thumbsupsmiley:

I have a question about Kactor and volume. The volume I've implemented doesn't want to detect my Kactor; ActorEntered and touch method are not called. However I tried with an hellbender and the volume detects hellbender turret. It must come from the KActor but I can't find what's wrong ? collision seems ok, common booleans too, ...

here is the code

The Kactor (the staticmesh can be found in DataRunUi.upl I've uploaded last saturday
class DataRun_Register extends KActor
   placeable;

var bool isRegistered;

defaultproperties
{
	isRegistered = false

	Begin Object name=StaticMeshComponent0
		StaticMesh=StaticMesh'DataRunUI.asset.Box_Red'
	End Object
}

The Volume:

class DataRun_Table extends PhysicsVolume
	placeable;

event PawnEnteredVolume(Pawn Other)
{
	LogInternal("pawn entered: "$Other);
}
event PawnLeavingVolume(Pawn Other)
{
LogInternal("pawn leaving: "$Other);
}

event ActorEnteredVolume(Actor Other)
{
  LogInternal("actor entered: "$Other);
  if(DataRun_Register(Other)!=None)
  {
   DataRun_Register(Other).isRegistered = true;
  }
}

event ActorLeavingVolume(Actor Other)
{

  LogInternal("actor leaving: "$Other);
}

simulated event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal )
{
  LogInternal("touch");
}
any help is appreciated :thumbsupsmiley:

#37 ambershee

ambershee

    Nimbusfish Rawks

  • Hosted
  • 3,114 posts
  • Location:Derby, UK
  • Projects:Mutator Week & Unreal 3 Projects
  •  Mad Mod Boffin

Posted 26 May 2008 - 06:25 PM

Vehicles are pawns, not physics actors. Are we sure kActor actually is an Actor, and not an Object? That would be a right royal pain in the arse.

#38 xiongmao

xiongmao
  • Members
  • 175 posts
  • Location:Paris

Posted 26 May 2008 - 10:02 PM

that's an actor (uncodex ) that's why I don't understand why it doesn't work :thumbsupsmiley:

[edit] I found it YouOu :D
Have to add this in defaultproperties
/**
 *	For encroachers, don't do the overlap check when they move. You will not get touch events for this actor moving, but it is much faster.
 *	This is an optimisation for large numbers of PHYS_RigidBody actors for example.
 */
bNoEncroachCheck=false

Damn boolean :thumbsupsmiley:

[Edit2] Major update
- Linktool
- Register/table
- Register Kismet event
- Carrier/Carrier Node

+ update documentation Appendix Carrier + Kismet

Enjoy :D

Edited by xiongmao, 26 May 2008 - 11:49 PM.


#39 knighteyes

knighteyes
  • Members
  • 21 posts

Posted 07 June 2008 - 01:04 AM

After looking at the code you've been doing, I must confess, I got scared.
But you have to grow brave someday, so here I am.
I have little knowledge of uscript, so I can't tell which part I'd like to code, and I'm sure I'll have to sweat to finish whatever part I try.
If you want, give me an assignment, here or with other project, that's not problem. And be sure I'll be knocking at your door asking questions.

Please give some direction, because I really don't know where to start here.

#40 ambershee

ambershee

    Nimbusfish Rawks

  • Hosted
  • 3,114 posts
  • Location:Derby, UK
  • Projects:Mutator Week & Unreal 3 Projects
  •  Mad Mod Boffin

Posted 07 June 2008 - 11:00 AM

Take a look at the Unreal Rider thread - that's what we're currently tampering with - we'll be coming back to DataRun at the end of the month :thumbsupsmiley:

If you want to do something, perhaps you could look into doing the weapons? The code is partially complete, so you have your starting point. The trickiest part will be in the dual-wielding weapons; the MegaLink already has an x2, which has the weapon drawn twice, but it needs playing with to get it firing from both weapons - might need some tinkering and looking at the Enforcer code. Will probably prove to be tricky to work out, but easy to implement.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users