*v@a矓CofNonePropBreakableMP STPExtrasCoreEngineSystemChangeViewTriggerPostBeginPlayP2PickupCustom ExplosionClientSetBehindViewFPSGame RemoteRoleBaseFXGetSingleActorViewClientSetViewTarget Postal2GameTick SetToNormal PlayCheer ResetPickupTouchPickupTriggerTimer BlowThisUp CyclePickup BeginState PrepPickupGetTeammateViewGetCurrentLeaderViewAddToViewingListWaitingAcceptThisDamage MonitorWorldSpecificInits Strippers SetToBrokenDoSpawnGetRateGetSpawnClassBroken GetNextViewhome InitializeMyExplosionRadius LifeSpanMyExplosionMag DrawType MovementKarma LightColorForce GetAnimCheer Collision LightingMyExplosionDamage TakeDamageClientMessageMyAnims Inventory AT_Dance AT_Stand AT_OnBedAT_None WhatHurtsMeDFT_IgnoreAllDamageDFT_SpecifiedDamageOnlyDFT_FilterSpecifiedDFT_FilterNoneDamageClassesBreakEffectSoundStaticMeshBrokenStaticMeshNormal BreakEffect MinDamageRemoveFromViewingListVT_TeammateViewVT_CurrentLeaderViewVT_MultipleActorViewVT_SingleActorView bDirectional PT_Cycle PT_Randomize PT_SingleMyDamageClass bProjTarget SyncInfo MaleSuicideFemaleSuicide StaticMesh SetRespawn GibModifierReusableSpawner RespawnTimeReusablePawnSpawnerbPathCollidingPropExplosionBasePropExplosionPropExplodedDamageBegin CameraSpot SwapClass MultiPickup bClientAnimPropBreakableFX EmittersHome2 s_cheer3Mesh s_cheer1 s_cheer2UnTouch CheerSoundAnimEnd MyActiondropped Exploding NotifyPawnsExplodingSound HealthMaxTexture AutoDestroyP bAnimLoopSimAnim SpawnSkin SpawnTag Momentum HitLocationDamageEventInstigatorOther SpawnLocDelta bNetInitial instigatedByActor PawnSpawnerSpawnerChannelCountSoundScoreRoleTagEventClassbSpawnWhenNotSeenNumToKeepAlive SpawnRateTeam MiscSounds MaxSpawnedbMonitorWorld TotalSpawned TotalAlive UseClass SpawnRotProps CarExplodePackage TimeSecondsNetModeControllerListCheckHurtRadiusDelayToNotifyTimeDelayToHurtTimeConstExplodedDamage BurnedDamageSkinsForceLocation Proj_Icon P2ExplosionAmbientSounds ActionType phoneSex zo_barrel1 Instigator bBehindViewSpawned HitActorOwnernextControllerrnd BLEND_TIME MP_StrippersMP_PostalBabe_JeansLastRenderTimeanim_StripperMP bNetDirtybActive TextBufferSpriteEmitter152SpriteEmitter153ObjectSetViewTargetEnum FunctionHealthPickupClasses PickupList CurrIndex removethis replacer checkint bInitializedState AmbientSoundAnimRepRotatorVector LinkSkelAnim SetDrawTypeSetStaticMesh MaterialInfoStructSpriteEmitterMyPick PickupMesh PickupSkins StrPropertyStructPropertyArrayProperty LocationECustomPickupType bBlockActorsbBlockPlayers Rotation PickupTypeMySyncEChangeViewTypebStaticbHiddenCollisionRadius SkeletalMeshNewViewCameraChangeTimeViewTagBeginViewingMessageEndViewingMessage ViewingList CurrentViewClassProperty NextView bNextActor NamePropertyMeshAnimationObjectPropertyFloatPropertyCScoreCHigh BoolProperty WhatTeam bIsActivePawnRespawnEffectEmitterLevel TeamInfo SkinsNormal SkinsBrokenReplicationInfoRespawnEffectSoundAmbientSoundNormalAmbientSoundBroken ScriptTextEDamageFilterTypeACi ReturnValue Triggers IntProperty BytePropertybAccept Zo_Mesheszo_barrel_exploded DamageTypePlayerController LevelInfoPlayerReplicationInfo BulletDamage Controllerh@j @f\@B2 ,ŖŖŖŖŖŖ<g3!  2R(@n5L$MY@k @|  %c'Gg+!#,!.!@H =!@JD6@P4ZNoa@<Y/a /$PCG8$B-$CUWx{.$@LBzW 9:9:$- ?nYQZf167324 CBC@@E"MH@FsJ@?>=AORNPONMQ]$9U!N S9?$\9?$S9?%$SQ Uc2WD hdĦC Y]%o stupidly exploded herself.X]%o stupidly exploded himself.\$A<Ob@Xu/C<Y /$PG8$4C-$;DkY.$@@\EDCB)uI]` e acf  TSR?r-qr.-* 2r..-*  ..-p{C :C      ( -( g( @%7 %y7 a  a(((9:(9:$7w* 7%ha ? w*%7-' /&B- - F-? U-"z% q!  /aA w*---0 10DE/(2w/*"a/ DEw"*"#"% -( 9?%a'( pvdw*a ? 'a`ef_aw dT_ (&w.*. ldf=I%G7 =rd  c x14 Wr.1* 2r..1* ..1p{B :BP $ - $  - $  '-'- *$  '-'-      mbl ?5--'-'%ba=-( q7J/7q!7-' uev]Z167324zQ&&.- - F-? U-"z% q!  /aA w*---0 10GH&(2w&*a& GHw*#% -( 9?%a'( D[G 3*w*9?3r[w*%39D&w*w**  {y&.b9:9:$ xw! w!*$ ! % 7 w        pK.!r*aI!  w^j" ?5--'-'%^]=-( t8R:8q!8r*8-( ~_ ^9:(9:$ >9:(9:$7\\7% d!D// SyncInfo // Hack to get pickup skins and custom meshes working on client side, since pickups can't be RemoteRole SimulatedProxy class SyncInfo extends ReplicationInfo; var P2PickupCustom MyPick; // Pickup we're associated with var StaticMesh PickupMesh; // Static mesh for our pickup var array PickupSkins; // Skins for our pickup // Replication // ensure our mesh and skins get replicated. replication { unreliable if (Role == ROLE_Authority && bNetDirty) MyPick, PickupMesh, PickupSkins; } // PostBeginPlay // Set our pickup info and get skin and mesh info. event PostBeginPlay() { MyPick = P2PickupCustom(Owner); if (MyPick == None) Destroy(); else { PickupMesh = MyPick.PickupMesh; PickupSkins = MyPick.PickupSkins; } } // Tick // Set pickup mesh and skins on client side. simulated event Tick(float Delta) { local int i; // Abort if player can't see us if (!MyPick.PlayerCanSeeMe() || Level.NetMode == NM_DedicatedServer) return; if (MyPick.StaticMesh != PickupMesh && PickupMesh != None) { MyPick.SetDrawType(DT_StaticMesh); MyPick.SetStaticMesh(PickupMesh); } for (i=0; i UseClass; local vector SpawnLoc; local Rotator SpawnRot; local Actor spawned; local Actor HitActor; // Check if active if(!bActive || !bIsActive) return; // If we only spawn when not seen, and this was rendered recently, then // fail. if(bSpawnWhenNotSeen && (LastRenderTime + BUFFER_TIME >= Level.TimeSeconds)) { //log("failed to spawn based on visibility"); return; } // If we're trying to spawn now, and we have our TotalAlive connected to the whole level // as a oppposed to just locally, then count up all that are still alive in the level // with our use tag if(bMonitorWorld) MonitorWorld(); // If we already have enough alive // and we don't want an infinite amount if(NumToKeepAlive > 0 && TotalAlive >= NumToKeepAlive) { GotoState('Waiting'); return; } //log("last render time "$LastRenderTime); //log("current time "$Level.TimeSeconds); //log("TotalSpawned "$TotalSpawned); //log("TotalAlive "$TotalAlive); // Check to make sure you're not going to smash anybody ForEach CollidingActors(class'Actor', HitActor, CollisionRadius, Location) { //log("hit this stuff "$HitActor); // If you hit something not static, then don't allow a spawn if(HitActor != None && HitActor.bBlockActors && HitActor.bBlockPlayers && !HitActor.bStatic) return; } // Set the location as where the spawner is, and // let the LD's determine how the things are rotated/spit out when they spawn SpawnLoc = Location; SpawnRot = Rotation; UseClass = GetSpawnClass(); if(UseClass != None) spawned = spawn(UseClass,,SpawnTag,SpawnLoc,SpawnRot,SpawnSkin); // If the spawning worked, check to do specific stuff to it // and record that you successfully spawned one if(spawned != None) { // Link me to the spawner so when I die, the spawner is triggered to make more spawned.Event = Tag; // Do special things to the newly spawned SpecificInits(spawned); // Successful spawn TotalSpawned++; TotalAlive++; // Check if you've made enough // 0 for MaxSpawned is infinite if(MaxSpawned != 0 && TotalSpawned >= MaxSpawned) { bIsActive=false; return; } } // Try to spawn again, if necessary if(SpawnRate > 0) SetTimer(GetRate(), false); //log("total spawned "$TotalSpawned); } function Trigger( actor Other, pawn EventInstigator ) { if (!bIsActive) { bIsActive=true; bActive=true; TotalSpawned=0; Super.Trigger(other, EventInstigator); } else bIsActive=false; } G}]@IHf;Q;Q;Q;Q O1// ReusablePawnSpawner // A PawnSpawner that can be used over and over again. Good for setting up executions that require pawnspawners. class ReusablePawnSpawner extends PawnSpawner; var bool bIsActive; /////////////////////////////////////////////////////////////////////////////// // Perform the actual spawn /////////////////////////////////////////////////////////////////////////////// function DoSpawn() { local class UseClass; local vector SpawnLoc; local Rotator SpawnRot; local Actor spawned; local Actor HitActor; // Check if active if(!bActive || !bIsActive) return; // If we only spawn when not seen, and this was rendered recently, then // fail. if(bSpawnWhenNotSeen && (LastRenderTime + BUFFER_TIME >= Level.TimeSeconds)) { //log("failed to spawn based on visibility"); return; } // If we're trying to spawn now, and we have our TotalAlive connected to the whole level // as a oppposed to just locally, then count up all that are still alive in the level // with our use tag if(bMonitorWorld) MonitorWorld(); // If we already have enough alive // and we don't want an infinite amount if(NumToKeepAlive > 0 && TotalAlive >= NumToKeepAlive) { GotoState('Waiting'); return; } //log("last render time "$LastRenderTime); //log("current time "$Level.TimeSeconds); //log("TotalSpawned "$TotalSpawned); //log("TotalAlive "$TotalAlive); // Check to make sure you're not going to smash anybody ForEach CollidingActors(class'Actor', HitActor, CollisionRadius, Location) { //log("hit this stuff "$HitActor); // If you hit something not static, then don't allow a spawn if(HitActor != None && HitActor.bBlockActors && HitActor.bBlockPlayers && !HitActor.bStatic) return; } // Set the location as where the spawner is, and // let the LD's determine how the things are rotated/spit out when they spawn SpawnLoc = Location; SpawnRot = Rotation; UseClass = GetSpawnClass(); if(UseClass != None) spawned = spawn(UseClass,,SpawnTag,SpawnLoc,SpawnRot,SpawnSkin); // If the spawning worked, check to do specific stuff to it // and record that you successfully spawned one if(spawned != None) { // Link me to the spawner so when I die, the spawner is triggered to make more spawned.Event = Tag; // Do special things to the newly spawned SpecificInits(spawned); // Successful spawn TotalSpawned++; TotalAlive++; // Check if you've made enough // 0 for MaxSpawned is infinite if(MaxSpawned != 0 && TotalSpawned >= MaxSpawned) { // Kamek change: instead of destroying, just set us inactive and stop spawning shit. bIsActive=false; return; } } // Try to spawn again, if necessary if(SpawnRate > 0) SetTimer(GetRate(), false); //log("total spawned "$TotalSpawned); } // Reset our total number of spawned. function Trigger( actor Other, pawn EventInstigator ) { if (!bIsActive) { bIsActive=true; bActive=true; TotalSpawned=0; Super.Trigger(other, EventInstigator); } else bIsActive=false; } 0Ks_@Mhif;Q;Q;Q;Q `// PropExplosionBase // a base class for LD's to create their own prop explosions. // Provides all the functionality of an explosion except the emitters. class PropExplosionBase extends P2Explosion; var(Explosion) float MyExplosionMag; // How strong (momentum, damage, radius) the explosion is var(Explosion) float MyExplosionDamage; // how much it hurts var(Explosion) float MyExplosionRadius; // how far the hurt reaches var(Explosion) class MyDamageClass; // type of damage caused function PostBeginPlay() { Super.PostBeginPlay(); if (Pawn(Owner) != None) Instigator = Pawn(Owner); } // state Exploding // Use our values instead of the P2Explosion defaults auto state Exploding { Begin: if (ExplodingSound != None) PlaySound(ExplodingSound,,1.0,,,,true); Sleep(DelayToHurtTime); CheckHurtRadius(MyExplosionDamage, MyExplosionRadius, MyDamageClass, MyExplosionMag, ForceLocation); Sleep(DelayToNotifyTime); NotifyPawns(); } ~// PropExplosion // Default prop explosion. Copied from RocketExplosion. class PropExplosion extends PropExplosionBase; Vy D VBa![ ;Y/ S: #9:9:$I-(Mr)* w+)X)r0* w600%7,w,*, 5class PropExplodedDamage extends ExplodedDamage; T%X 9:9:$Ar+*>9:9:$-'L+bw6*6%7.w.*.i aR\ /a0 ;A0;10 V:!u9:9:$($9:9:$'-5(%74m9:9:$a:4(9:9:$a:4-5'3-5 u^//============================================================================= // PropBreakableMP. //============================================================================= class PropBreakableMP extends PropBreakable hidecategories(PropBreakable); // Rewriting a bunch of stuff here, don't allow mapmakers to change the values from PropBreakable parent, cuz they won't work. var() float MinDamage; // Minimum amount of damage required to "make a dent", so to say var() float HealthMax; // How much health I have before exploding var() float RespawnTime; // How long in seconds inbetween respawns. If 0, respawns disabled. var() class RespawnEffect; // Emitter class for the respawning effect var() class BreakEffect; // Emitter class for the breaking effect var() StaticMesh StaticMeshNormal; // Regular (non-broken) static mesh. If None, inherited from defaults. var() StaticMesh StaticMeshBroken; // Broken static mesh. If None, simply hide. var() array SkinsNormal; // What skins to use when not broken. If None, inherited from defaults. var() array SkinsBroken; // Skins to use when broken. If None, don't change skins. var() Sound BreakEffectSound; // What sound to play when I get broken var() Sound RespawnEffectSound; // What sound to play when I respawn var() Sound AmbientSoundNormal; // Ambient sound when not broken var() Sound AmbientSoundBroken; // Ambient sound when broken var() array< class > DamageClasses; // Array of DamageTypes that I either filter out or only accept var() enum EDamageFilterType // How I treat incoming damage. { DFT_FilterNone, // Accept all incoming damage. DFT_FilterSpecified, // Accept all incoming damage EXCEPT those DamageTypes specified in DamageClasses. DFT_SpecifiedDamageOnly, // Accept ONLY the DamageTypes specified in DamageClasses. DFT_IgnoreAllDamage // Ignore all damage -- can only be exploded by a triggered event } WhatHurtsMe; replication { reliable if (Role == ROLE_Authority && bNetInitial) StaticMeshNormal, StaticMeshBroken, SkinsNormal, SkinsBroken; reliable if (Role == ROLE_Authority) SetToNormal, SetToBroken; } // PostBeginPlay // Call super, and set our normal static mesh/skins. event PostBeginPlay() { Super(Prop).PostBeginPlay(); SetToNormal(); } // SetToNormal // Reset our max health and set our normal static mesh/skins. simulated event SetToNormal() { local int i; // Reset our max health, and "un-hide" us if (Role == ROLE_Authority) { Health = HealthMax; bHidden = False; } // Reset our static mesh. If no StaticMeshNormal was specified by the mapmaker, we set it to the default StaticMesh here. if (StaticMeshNormal == None && StaticMesh != StaticMeshBroken) StaticMeshNormal = StaticMesh; else SetStaticMesh(StaticMeshNormal); // Set ambient sounds if (AmbientSoundNormal == None && AmbientSound != AmbientSoundBroken) AmbientSoundNormal = AmbientSound; AmbientSound = AmbientSoundNormal; // Set skins (if specified) for (i=0; i damageType) { local int i; local bool bAccept; if (WhatHurtsMe == DFT_IgnoreAllDamage) return false; if (WhatHurtsMe == DFT_FilterNone) return true; bAccept = false; for (i=0; i damageType) { // Check first if we take this damage if(!AcceptThisDamage(damageType)) return; // Only remove health if the singular damage was strong enough if(damage > MinDamage) { Health -= damage; // if you run out of health, break if(Health <= 0) BlowThisUp(Damage, HitLocation, Momentum); } } // state Broken // Wait to respawn, or destroy if we don't respawn. state Broken { ignores TakeDamage; // BeginState // Set our respawn timer or destroy ourself. function BeginState() { if (RespawnTime > 0) SetTimer(RespawnTime, false); else if (bHidden) Destroy(); } // Timer // Reset ourself and exit the Broken state. event Timer() { SetToNormal(); GotoState(''); } } // defaultproperties // Properties of our defaults! Yg#%9:9:$-9:9:$@[LLTE'j iK$@y$A^$pBJXIHGFYA 0ZV`g:// P2PickupCustom // MultiPickup that allows setting custom static meshes and skins for client replication. class P2PickupCustom extends MultiPickup hidecategories(MultiPickup); var() array< class > PickupClasses; // same as MultiPickup var() enum ECustomPickupType { PT_Single, // one pickup only PT_Randomize, // randomize through PickupClasses PT_Cycle // cycle sequentially through PickupClasses } PickupType; var() StaticMesh PickupMesh; // Custom static mesh -- same for all pickups var() array PickupSkins; // Skins for static mesh. Ignored if PickupMesh == None var array PickupList; var SyncInfo MySync; // SyncInfo for this pickup // PostBeginPlay // Spawn our SyncInfo for replicating the mesh/skins event PostBeginPlay() { local int i; Super(P2PowerupPickup).PostBeginPlay(); //log(self$" class size "$PickupClasses.Length); // Make room for the new pickups PickupList.Insert(0, PickupClasses.Length); // Fill in the array for(i=0; i 0) { MySync = spawn(class'SyncInfo', Self,, Location); if (PickupMesh != None) SetStaticMesh(PickupMesh); for (i=0; i removethis, class replacer) { local int i; // replace the class for(i=0; i