DataRun Project
#21
Posted 15 May 2008 - 09:41 AM
#22
Posted 15 May 2008 - 10:11 AM
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
Posted 15 May 2008 - 10:44 AM
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
Posted 17 May 2008 - 01:53 PM
I've worked a bit on the link tool here is a new video (another one I know ) 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 , 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
Posted 19 May 2008 - 09:30 AM
#26
Posted 19 May 2008 - 08:29 PM
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 ?
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
Posted 20 May 2008 - 10:19 AM
Good to know it helped fix a bug with the camera too.
#28
Posted 21 May 2008 - 03:08 PM
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
Posted 21 May 2008 - 03:28 PM
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
Posted 21 May 2008 - 03:34 PM
Welcome back
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
Posted 21 May 2008 - 04:54 PM
#32
Posted 22 May 2008 - 11:28 PM
I've begun Kismet Events and Actions implementation. I 'm facing some problems with setting variable in action
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
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
Posted 23 May 2008 - 11:15 AM
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
Posted 23 May 2008 - 12:17 PM
+5 seconds, +15 seconds, +30 seconds, +60 seconds
#35
Posted 24 May 2008 - 02:14 AM
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.
#36
Posted 26 May 2008 - 06:09 PM
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
#37
Posted 26 May 2008 - 06:25 PM
#38
Posted 26 May 2008 - 10:02 PM
[edit] I found it YouOu
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
[Edit2] Major update
- Linktool
- Register/table
- Register Kismet event
- Carrier/Carrier Node
+ update documentation Appendix Carrier + Kismet
Enjoy
Edited by xiongmao, 26 May 2008 - 11:49 PM.
#39
Posted 07 June 2008 - 01:04 AM
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
Posted 07 June 2008 - 11:00 AM
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