Core.Object | +--Engine.Actor | +--Engine.Pawn | +--XIII.XIIIPawn | +--XIII.XIIICorpse
CorpseBlood
CB
>
InitialInv
int
iPreDefinedDeath
void
PostBeginPlay()
//_____________________________________________________________________________
SetUpInitialInventory(XIIIPawn P)
bool
IsDead()
BeginState()
ReduceCylinder()
// prone body should have low height, wider radius
00001 //----------------------------------------------------------- 00002 // 00003 //----------------------------------------------------------- 00004 class XIIICorpse extends XIIIPawn; 00005 00006 var() array< class<Inventory> > InitialInv; // Inventory to give the corpse 00007 var() int iPreDefinedDeath; 00008 var CorpseBlood CB; 00009 00010 //_____________________________________________________________________________ 00011 event ParseDynamicLoading(LevelInfo MyLI) 00012 { 00013 local int i; 00014 00015 Log("ParseDynamicLoading Actor="$self); 00016 for (i=0; i<InitialInv.Length; i++) 00017 { 00018 MyLI.ForcedClasses[MyLI.ForcedClasses.Length] = InitialInv[i]; 00019 (InitialInv[i]).Static.StaticParseDynamicLoading(MyLI); 00020 } 00021 } 00022 00023 //_____________________________________________________________________________ 00024 function PostBeginPlay() 00025 { 00026 // Super.PostBeginPlay(); 00027 SetupInitialInventory(self); 00028 } 00029 00030 //_____________________________________________________________________________ 00031 function GiveSomething(class<Inventory> ItemClass, XIIIPawn P) 00032 { 00033 local Inventory NewItem; 00034 00035 if( P.FindInventoryType(ItemClass)==None ) 00036 { 00037 NewItem = Spawn(ItemClass,,,P.Location); 00038 if( NewItem != None ) 00039 NewItem.GiveTo(P); 00040 } 00041 else if ( Class<Ammunition>(ItemClass) != none ) 00042 { 00043 NewItem = P.FindInventoryType(ItemClass); 00044 if (NewItem != None) 00045 Ammunition(NewItem).AmmoAmount += Class<Ammunition>(ItemClass).default.AmmoAmount; 00046 } 00047 } 00048 00049 //_____________________________________________________________________________ 00050 function SetUpInitialInventory(XIIIPawn P) 00051 { 00052 local int i; 00053 00054 for (i=0; i<InitialInv.Length; i++) 00055 { 00056 GiveSomething(InitialInv[i], P); 00057 } 00058 00059 } 00060 00061 //_____________________________________________________________________________ 00062 auto state Dead 00063 { 00064 ignores Trigger, Bump, HitWall, HeadVolumeChange, PhysicsVolumeChange, 00065 Falling, BreathTimer, Tick, AnimEnd, TakeDamage; 00066 00067 // prone body should have low height, wider radius 00068 function ReduceCylinder() 00069 { 00070 local float OldHeight, OldRadius; 00071 local vector OldLocation; 00072 00073 SetCollision(True,False,False); 00074 OldHeight = CollisionHeight; 00075 OldRadius = CollisionRadius; 00076 SetCollisionSize(1.7 * Default.CollisionRadius, CarcassCollisionHeight); 00077 PrePivot = vect(0,0,1) * (OldHeight - CollisionHeight); // FIXME - changing prepivot isn't safe w/ static meshes 00078 OldLocation = Location; 00079 if ( !SetLocation(OldLocation - PrePivot) ) 00080 { 00081 SetCollisionSize(OldRadius, CollisionHeight); 00082 if ( !SetLocation(OldLocation - PrePivot) ) 00083 { 00084 SetCollisionSize(CollisionRadius, OldHeight); 00085 SetCollision(false, false, false); 00086 PrePivot = vect(0,0,0); 00087 if ( !SetLocation(OldLocation) ) 00088 ChunkUp(200); 00089 } 00090 } 00091 PrePivot = PrePivot + vect(0,0,3); 00092 } 00093 function BeginState() 00094 { 00095 PlayDyingAnim(class'DTSuicided', vect(5,0,0)); 00096 ReduceCylinder(); // Kept this to avoid visual pbs 00097 if ( CB == none ) 00098 { 00099 if ( (Level.Game != none) && (Level.Game.GoreLevel == 0) ) 00100 CB = spawn(class'CorpseBlood', self,, Location - (CollisionHeight-8) * vect(0,0,1), rotator(vect(0,0,-1))); 00101 // CB.DetachProjector(true); 00102 // CB.SetDrawScale(fRand()*0.35 + 0.1); 00103 // CB.AttachProjector(); 00104 } 00105 00106 } 00107 function bool IsDead() 00108 { 00109 return true; 00110 } 00111 } 00112 00113 //_____________________________________________________________________________ 00114 simulated function PlayDyingAnim(class<DamageType> DamageType, vector HitLoc) 00115 { 00116 local int i; 00117 00118 if ( (iPreDefinedDeath >= 0) && (iPreDefinedDeath <= 7) ) 00119 I = iPreDefinedDeath; 00120 else 00121 I = rand(10); 00122 switch(I) 00123 { 00124 case 0: PlayAnim('DeathEpauleGauche',120.0); break; 00125 case 1: PlayAnim('DeathChevilleGauche',120.0); break; 00126 case 2: PlayAnim('DeathChevilleDroite',120.0); break; 00127 case 3: PlayAnim('DeathBuste3',120.0); break; 00128 case 4: PlayAnim('DeathDos',120.0); break; 00129 case 5: PlayAnim('DeathVentre',120.0); break; 00130 case 6: PlayAnim('DeathBuste0',120.0); break; 00131 case 7: PlayAnim('DeathBuste2',120.0); break; 00132 case 8: PlayAnim('DeathTete2',120.0); break; 00133 case 9: PlayAnim('DeathTete',120.0); break; 00134 case 10: PlayAnim('DeathEpauleGauche',120.0); break; 00135 } 00136 } 00137 00138 // ControllerClass=class'XIII.Cadavre' 00139 00140 00141 defaultproperties 00142 { 00143 iPreDefinedDeath=-1 00144 bSearchable=True 00145 bIsDead=True 00146 Health=0 00147 ControllerClass=None 00148 CarcassCollisionHeight=23.000000 00149 bPhysicsAnimUpdate=False 00150 bStasis=True 00151 bBlockActors=False 00152 bBlockPlayers=False 00153 bProjTarget=False 00154 Mesh=SkeletalMesh'XIIIPersos.XIIIM' 00155 CollisionHeight=78.000000 00156 }