[Setup] Product=CorpseMania Version=105 Archive=CorpseMania.umod SrcPath=. MasterPath=.. Requires=UnrealTournamentRequirement Group=SetupGroup Group=umodINIGroup Group=CorpseManiaGroup Group=umodIncludeFilesGroup [UnrealTournamentRequirement] Product=UnrealTournament Version= [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=631,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=533,Flags=3) [umodINIGroup] AddIni=UnrealTournament.ini,Engine.GameEngine.ServerPackages=CorpseMania [CorpseManiaGroup] File=(Src=System\CorpseMania.u,Size=261661) File=(Src=System\CorpseMania.int,Size=200) File=(Src=System\CorpseMania.txt,Size=3877) [umodIncludeFilesGroup] File=(Src=CorpseManiaLogo.bmp,Size=28958) [Setup] LocalProduct=CorpseMania ReadMe=System\CorpseMania.txt SetupWindowTitle=CorpseMania AutoplayWindowTitle=CorpseMania Options ProductURL=http://www.planetunreal.com/HOB/ VersionURL=http://www.planetunreal.com/HOB/ Developer=HOB DeveloperURL=http://www.planetunreal.com/HOB/ Logo=CorpseManiaLogo.bmp [UnrealTournamentRequirement] LocalProduct=UnrealTournament ProductURL=http://www.unrealtournament.com/ VersionURL=http://unreal.epicgames.com/ Developer=Epic Games, Inc. DeveloperURL=http://www.epicgames.com/ *E"@=aIiP8"None CorpseManiaInitforCore PathNodeSystemEngineCorpseRulesCWindowSetText SetHelpTextSounds HideWindowBowingTimer AdjustAimTweenToSwimming PlaySwimmingWalk ReplaceWithTreadSmHeadHitGetUpSetFontCreateControlBotpack TakeDamageZombie GetValueStillGhoulBreath2 ShowWindowPlayMeleeAttack BeginState TWalk001 SetValue GreenBlood RightHitUMenuUndeadPackCWUWindowLook DrawScale UndeadPackBroadcastLocalizedMessage explodedBot PlayWaitingPlayRangedAttackMeshSkinLogTeamChangeCringe UnrealShareSetProgressMessageHitWallLeftHit InitVelocityCollisionRadiusMassBigGib ZombieMaster CheckEndGame KamiZombieRotator LightHueLightBrightness WalkTool TBrea001 GameEndedGhostCollisionHeight LightRadiusPlayHeadDeathHealth TStom001Created GroundSpeed Buoyancy CheckSurface OnSurfaceFatnessTweenToWalkingClientExtraChunksBackup EndStateMeleeDamageTargetDead3 SetRangeUMenuUndeadPackInclude LifeSpanDead2 GetString Victory1LPickDestinationRangedProjectileTweenToRunning CombatStyle ExplodingThirdPersonScale PlayDyingBegin PlayRunningSetWall PlayWalkingPlayRetreatingPlayerViewScalePlayTeleportEffectDead5Trigger ShootTarget ProcessTouch Victory1 AddToTeam HitSound1RunFireStyles ListClass HitSound2 ItemHeightAddItem Attacking ChangeTeamSetSelectedIndex ClearOrders CalcEndStatsTweenToFighterUMenuTweenToWaiting TDeat002 TDeat001Carcass OutMessageTFist TFigh001Sort TeamCannonDead4StylePlayWinMessage MeleeAttackClientGameEndedClientSetRotationUMenuUndeadPackExclude DecapitatedRunJumpZAcquireHealingAmount ZombifiedUMenuUndeadPackListBoxUMenuUndeadPackWindowTweenToPatrolStopAddDefaultInventoryFindPlayerStartMaxDesireabilityPlayWaitingAmbushPlayThreateningUseAmmoRelativeStrengthPickupViewScaleDie AnimSequencePlayVictoryDancePlayPatrolStop PlayTurning ZoneChange GiveAmmoPickupMessagestompedPostBeginPlay LogPickup PlayLanded PlayerPawnUTHumanCarcass ScoreKill DrawTimeAt SpectatorAnimEndMutatorTakeDamage syllable3 PlayGutDeathYellAt DrawType GoBerserk syllable2 syllable1 syllable5EndGame syllable6Breath1Pickup CommanderLogPlayerConnectSitting FlushLog TShuffle TDeat003 ShootLoad ClawDamageChunkUp SoundRadiusTChest LavaDeathWalkOut PlayBigDeathWeaponPlayLeftDeathPlayPickupMessage syllable4 StyleChanged AltFiring LightType LoadMutators RotationRate GiveWeaponPlayRightDeath Rotation MeleeRange AccelRateThirdPersonMesh PickupSoundPickupViewMesh LightEffectCanFireAtEnemy MyDamageTypeMomentumTransferbHasRangedAttacksliderChanged MaxSpeedClientChangeTeam BeforePaintdarkmodeCheckedClawDamageTargetTreadLg MiscSoundPlayRoamingSoundspeed WaterSpeed AirSpeed ImpactSoundNotifyPaintAggressivenessaizombiescheckedAttitudeToCreatureGetLookAndFeelTextureexessivemodechecked ScriptedPawnPlayThreateningSoundnoweaponsChecked RefireRateCMLossMessageResized CMOutMessageExternalDragOver CmWinMessageLandedTourneyChanged2 RegisterPlayMovingAttack LivesChangedReceiveDoubleClickItembMeshEnviroMapMakeSelectedVisible SetFramebAcceptExternalDragDropbCanDragExternal PlayDive GuardingmaxundeadChangedPlayCombatMoveBurned DestroyedFlyingslider2ChangedTimeSliderChanged wanderingCorpseScoreBoardRoamingStep SetEnemy TraceFire ValidTouchProjectileFire GetColorTickInventoryGroupFallingUserdamageAttitudeTo ShakeViewKilledRulesMenuType PostLogin SetRespawnClientAltFireTouchbCollideWorldLogout PostRender ReduceDamage PlayRecoilReceiveLocalizedMessageDamageVectorFeigningDeathPlayerSpectatingAddBotRestartPlayer AddVelocity JumpOffPawn SetMultiSkin PreBeginPlayBotDesireabilityPlayerViewOffset GetMultiSkin SoundVolume PlayTakeHit IsRelevantAltFireFireSetMovementPhysicsIcon PickupQueryInitGameReplicationInfo ItemName Intelligence DeathMessage SetEndCamsCheckReplacement ClientFire SaveConfigsPhysics gibbedByHUDTypeLight InitGameAmmo SoundPitch GameName Decoration VisibilitybBounceLogin BaseChange NormalFireDesiredRotationPreSetMovement bAmbientGlowClearProgressMessagesTransientSoundVolume LivesText ut_grenade2aizombiesText TossedGibGameEndedMessage3exessivemodeHelpDefaultWeaponScoreBoardTypeGameEndedMessage4 LivesHelp BeaconName MediumGib slider2text sliderHelpnoweaponsHelpGameReplicationInfoClasscorpseGameReplicationInfoCorpseManiaHUDCorpseRulesSClientaizombiesHelpGameEndedMessage2 darkmodeHelp slidertextexessivemodeTextZombieNaliRabbit ZombieMGib oneshotkillsDeZombifiedMessagemaxundeadtextmaxundeadHelpCorpsePlayerReplicationInfo darkmodeText SmallGib NoWeaponsSlayerMessagenoweaponsText slider2Help TourneyText TourneyHelp bStayClose VictoryGoalGetTeam HealthVialDrawCategoryHeadersUT_invisibilitySwingDrawGameSynopsisDrawVictoryConditions OneOnOneGameThreatAddPlayStartUpMessage IsOnTeamUT_ShieldBeltAssessBotAttitudePlayerViewMeshDrawFragCount StyleTextAttitudeWithFearTimeBetweenAttacks KeepHelpMutatorBaseClass CHSpectatorIncludeCaption ExcludeHelp IncludeHelp FindMutatorPickupAmmoCountExcludeCaption Threaten SpawnRockSlapDamageTarget TThro001ProjectileClassAltProjectileClassTSit TPunc001 FireSound AltFireSound CockingSound SelectSoundTGetUp SlapDamage TSlap001 StartMoving TSnif001PunchDamageTargetPlayAcquisitionSound ThrowOtherBelchThrow GibThrowerUMenuUndeadPackFrameCW GibCHelpUnderWaterTimeReducedDamagePctReducedDamageTypePlayChallengeUDamageModifyBehaviour SpawnBot ChainSaw HealthPack NeedPlayersDrawNameAndPing SortScores GetBigFont Freelance SetOrders StyleHelp KeepText bCanDragRoam WindowTitle bNeverBow GibCText DrawItemRemoveWaveAppend bTournament AppendItemGameEndedMessageFindTeamByName SetEditable ClientClass SetMaxLengthOvertimeMessageGetSelectedIndexSetNumericOnlybMovingRangedAttackTournamentPlayerPlayFearSoundSlapSetupNetworkOptionsbIsBossUTMenu NeedToTurn PunchDamageUWindowSmallCloseButtonUWindowEditControlUWindowHSplitter UWindowListUWindowListControlUWindowScrollingDialogClientUWindowHSliderControlUWindowComboControlUWindowDialogClientWindowUWindowControlFrameUWindowDialogControlUWindowFramedWindowUWindowListBoxUWindowListBoxItemGetPlayerOwner bSelectedMUWindowRootWindow bSizable GameClass DrawUpBevelUWindowCheckboxbCanFlyUWindowWindowTeamID OwnerWindow AccelerationbCanDoSpecialAlignWinLeft WhiteTextureItems EditBoxWidthbWaitingPlayer bIsSpectator WinHeight WinWidthWinTop VelocitySecondsEventInstigatorDoubleClickList SliderWidth bTeamGame ClipTextPRIFixedAreaClass NumPlayers bStatusBar MinHitWallGameNext PlayerNameEnemy HitNormalDrawStretchedTexture bSuccess CreateWindowControlOffsetbDamageTriggered CenterWidth CloseButton MinPlayersNewZone HitLocation Momentum bLeadTargetScoreBreath SpawnClassKiller HelpTextExternalControlCurY KillCountshakeHitLoc bShowScoresNum bCanStrafe SkinName TweenTimeOther DeltaTime RandSpinPingbHighDetailModeProjectileSpeedbRestartLevel MutatorClass bDecorativeNali WhiteColor AIRatingRootPlayerReStartStateSoundDampeningpraySetPos AnimFrame PointRegion LocationSkillClipX SplitPosZoneDesiredHeightReason SpawnSound HurtRadius LocalMessageFearGetNextIntDescCow WalkingSpeedbAdmin ClientAreadesireIcons MinWinWidthAttitudeToPlayerBruteTeamChest bWaterZone NaliRabbit DrawColor bProjTargettrailbQuiet DamageTypeCoughRegionBase InstigatorTargetFrame UT_BioRifle bDropDetailLeftClientWindowRightClientWindowNetMode bRightGrowFonts PlayerOwnerMantaBest DesiredWidth AmplifierYawG SplitterScaleiRZ CenterPos SetAlertnessClipYbCanOpenDoors actualDamageMale TazerProj TeamInfo WaterRing GreenColor RedColor urgefollow TEAM_Green TEAM_Blue TEAM_Gold bSuperHealFireProjectileSize bCanDuckP bCanSwim OrderObject enemyDist enemyDirtargYawErrHated DieCount oldAttitudewalkC animspeed bBerserk bCanSpeakdeath2nCurX ViewTarget RelatedPRI_2 EAttitude bHasWanderedThump bFirstAttackMInjur2MDeath3 FragLimit TimeLimitNumBots death1br death2br NextBotTeam TEAM_Red DesiredTeamNewTeam SmallestTeamaTeamHoursMinutesXOffsetYOffsetadjust CowBody1JGCow1LiverMGib1Gib4Gib5Gib3 finalRot NaliHeadJBody11thumpmtgibP3gibP6Tool CarcassAnimRandDirJArm11Gibs JPottery11 decision splat2tnMDeath4MDeath1SkinsNewBotVapour ChargeSize I_HealthHealMaxRandRotSurfaceNormal bOnGroundbCheckedSurface wallTime BaseOffset TraceNorm TraceLoc DotProduct ReturnValueHTitanN DesiredSpeedItem bAltFireY ViewRotation nextPawnLCB bPainZoneX projStart ScriptTextAWall bIsPlayerTeams FiringSpeedOwner bCanJump bRapidFire bInstantHitbUnlit bPointingOptionsMutator GasBagBelch StompSoundMale1step1t bEndFootStepTitan1 punch1Ti sniff1Tiroam1TibStomp bLavaTitan realSpeed StompEvent StepEventProjJgwar1 LevelInfo GameInfo Projectile AmmoType bChecked AmmoName PawnOwnerExtent RelatedPRI_1Deaths ZoneInfo TeamNameSweat TimeSeconds TimeHelp TimeTextUMenuMutatorExcludeOptionalObject bNetworkGameGameEndedCommentsFUMenuBotmatchClientWindowUMenuDialogClientWindowUMenuGameRulesBaseUMenuMutatorIncludeUMenuMutatorList ControlWidth ControlLeft ControlRightBotmatchParent Initialized ButtonWidth ButtonLeft FragEdit TimeEdit WeaponsCheckFFS StyleCombo MutatorListbKeepMutatorsExcludeInclude FrameExclude FrameInclude KeepCheckNumMutatorClasses MutatorNameHUDDeathMatchPlusbHiddenDNavigationPointInvPlayerReplicationInfoStatLogGameReplicationInfoTournamentWeaponRemainingTime Inventory bWarnTargetE instigatedBy ChallengeHUD decorMasscarcCTFGameSingleWaitingMessage FaceNameTeamNumW HitSounds TrailSizebTutorialGamebPlayerCarcass ViewportRollPitchtCanvasFontLevel bAvoidLedgesMover TentacleS FlockPawnActor GoldColor BlueColor UT_BioGelBioFearASMDMax WeaponScale HUDScaleLightCyanColor PlayerStringUT_BloodTrailPawnTourneyMessagekTournamentGameInfoTournamentGameReplicationInfo PingStringUT_Superring2 UT_Grenade UT_BloodPuffUT_BloodBurstUTCreatureChunksUT_SpriteBallExplosion ShockWavejTournamentScoreBoard FontInfoLocalMessagePlusCriticalEventPlus bCanWalk BloodSplatPickupMessageHealthPlusCriticalEventLowPlusMobNovice bKamikaze bRatedGamebForceRespawnbRequireReadyEndTimeaBotPlayerTeamNum OldStartSpotMinSizeLeavingLives TotalKillsAltStartupMessage OldFragLimit StillPlaying bStillHumanMyFonts CanvasFontTGRIXL2NewGib HudElements1 bForceScoresbHideAllWeapons bHideHUD bHideFaces HUDColorbCanClientFireMyFear CampingRate bGreenBloodNextDamageMutatorForceRespawnTextUTRulesCWindowForceRespawnHelp TourneyCheckForceRespawnCheckLodMeshPlayerCountSoundTextureError RemoteRoleRoleClassPackageSwitch TextBufferObjectEnum FunctionStateColorStructUnrealI StrPropertyStructPropertyClassProperty NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty BytePropertyYPosVictimYLinjuredXLExiting foundStartaPlayer StartSpot PawnLink NewPlayerInOptPortal LocalPlayerbSuperRelevant bAnimLoopValue WorldLog NextDesc NextMutator BaseMutator LocalLogDMMessageClass bBehindView impactVel PawnListbFading HitActor bGameEnded bVeryLowGoredist bLowGore bNoMonsters bCringing bGestureSetSizeOffset AmbAncientsliderOneShotscaryN2scaryN3scaryN7CGRIcarc2 GameStatecorpseGameRep AmountofGibs OrderedNumstempValbslayerstuff invcountAmountofGibs2 DarkMode GibEditBox ExessiveMode aizombiesbZombieBeatdownTourneyCheck2 LivesEdit NumZombies bNoWeaponsAmountofUndeadslider2UndeadEditBoxAmountofUndead2beveryonezombie TimeSlider TimeEditBox TimeSlider2 bGibCollect UndeadAmount MaxUndeadmaxundeadEditBox maxundead2Frags bUndeadPack NewZombieNewKamiZombieNewZombieMaster NewGhost NewGhoul` r 6VHѣʁFoFoFoFoFoRFoFoL]L].;L]L]L]L]L].;L]L]L]L]L].;L]L]L]L]L].;L].;م.;.;.;ZlZlZlZlZlՃC,.;.;ZlZlZlZlZl.;L]L]DۅRDۏRFoFoFoR.;.;R.;.;RDۅ.;RFoFoFoFoR.;.;R.;.;RDۅ.;RFoFoFoFoR.;DۅRL]L]L]L]RL]L].;RR.;R.;.;.;.;w4w4w4w4.;w4w4w4w4.;R.;.;w4w4w4w4.;ՃC,ՃC,ՃC,ԝXԝXԝXԝXԝXԝXԝXԝXԝXL].;L].;w4& & & & .;.;.;& & .;Fo.;.;R.;.;.;.;.;.;.;& & .;& & %; .;.;.;FoFoFoRFoFo.;FoFoFo.;Fo.;FoFoFoFoFoFo.;R!Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4Zlw4w4w4w4Zl]HZl]HZl]H]H]H]HZl]H]HZl]HRZlZlT]You have been Zombified!X])(You have survived the Zombie Beat Down!s]did not join the zombies!c]"!Everyone has joined the Zombies!g]collected the most gibs!V]] Overtime!efBd] CorpseMania.CorpseRulesSClientNCi-CMS] Corpse Maniancro ::$6Zl;(W p q g ;27^9 }9 }9 }RùRùqrRùRùqr9 }.;9 }9 }=9 }م9 }9 }9 }9 }t9 }=]H=VvR= RùH9H9jdRRjdiDjdiDjdjdjdiDRjdjdS"z] DEZOMBIFIED\Sg]You ate a Gib +Ui$?]_$?[b$?Z$?\BLY$Aa0)$?9$AF$@iV:$BM$AU:?Z:?"RRA#@O<o mYoNmT6)'JIv$tuk[zzmxiXwmT6)'MJIv$t B@ H j 2!jdُRR*ӏRRRRRH9H9RRR*ӏRRH9H9H9*Ӄ=]H=Vv= *ӏRH9H9S"i$L?_$L?b$L?Z$L?Y$pA0)$L?P~9$@F$@@:$AM$AyQP i@dta D SlB6%+qؔ!.Θ  9 }9 }9 }= =ُRù 9 }9 }           9 }9 }9 }9 }9 }9 }4PyxsPz|T= Zombified!FY$?r$?z$>b`^HRY$AL$Bm$HBn$HBZ$TDQ$HBI"P|$pAqu``$Q8?X:?@=v10Pd9$AF$?Ejz,wɧpeee~'N s5Jf`]?g `@%HF^Z tMe\i&bQK@r@JOOq@E@jos`@'r@~ Dga@q|uxf| U\{Tkw S  2!iDُRR*ӏRRRRRH9H9RRR*ӏRRH9H9H9*Ӄ=]H=Vv= *ӏRH9H9S"i$>_$>b$>Z$L>Y$@0)$>9$@F$@@:$AM$VIF~@*~K9@Al D;|Vr}@*wq@*@@*{@*>Xmk@DWP Wb4u Y@uAQe@ GORc6vdR!O%6q6?-HR Rq +a L EB6^I1A@G:$A]@cK +d h >B6 d5Gv+qؘ enRù enen= 9 }4`,^L$BI"1A@G^j SIQ@z} Za UmT6 xxxxxxxxxxo  'v$PAtvTMoI-(  O @ngw!F I-'->' JCU:n d B6} ֔!.΅9 }9 }  =_R9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }=G=4phWcLxr$ Az$?beRcY$ CL$Cn$CZ$HDQ$UI"~,}$?Fqu``$Y?v10)$ff>PPH |^$pA9$\BF$?:$zCU:?0uQl =VdR#?L?aDPVի>Rl 6-!7l{.>!l{.>l?a!7a!!l{.>66!%l{.>l?a!a!P--a!%a!P-- O _l st,@+Cc <B6Jp+qؘ     4F^DL$BI"^`$>X:?1)$ff?HR"9$AA@PG:$C8qxLwKT@Uj]mTauQ aG,nB=J gn/gEnaY86-a!\@a!oPnի>Ya!P-- ou;{`cRAzZUIamDaNb#?L?aD`aի>ba!`-- yCLJ^ P E b# H6 == R !t"yrү=l$Cd$Co$pAa"2ojY$AaI0)$?FSS^A@GM$Ao s R::$ 0 -a \a V-\$\$z!H z!k a w * Yz!k--H> a Aa i*w * EwA*A? a Aa iw * wA*A a w * ? a w *  a 0w * Aa iYwA*A- a w *  a w *  L_8jxZի?6ZHC?,2ծL>_ Zv6-? coKPIMNs K-Na/!By.N-@(N?a??&??&8NO?%w.N*-.N-w.N*-.N->?,ףp?I::$R `(eK@vP_\Z ]XI-Z' |KS h@~@@[e _\paN @&V@ Yyy @~gI1paAB,6- Tw*a!B@ >na!@ > @Lf@W @Pz[Q6-aAB26-[~V! a!>>~qw*a&!B[~a&![ scWf G@nv Ee4i0HaAB,6- a!ff > PdOZwXYW]cJ-Z' FSN`GB  T yV X }2i!zZU.;C]has joined the Zombies!cC@S@apg JV;t~ <4H[K6- ->>{.>a!Q8 ->( FgfA_+aAB26-A!P !r -! a!>>a&!A uLB~Dd &2jA4.\yp+X|.XX3)K4螦    +XQɎK4螦     +XQɎ  X3)K4QɎ```xo xxx|.Xڎ|.Xڎ|.Xڎ|.Xڐ+X|.Xڱ````,wɧe,wɧeQɎX3)QɎX3)X3)QɎ```+X|.XwK4螦    +XK4螦     +X  wK4```xo xxx|.Xڎ|.Xڎ|.Xڎ|.Xڐ+X|.Xڱ````,wɧe,wɧewww```+X|.XwK4螦    +XK4螦     +X  wK4```xo xxx|.Xڎ|.Xڎ|.Xڎ|.Xڐ+X|.Xڱ````,wɧe,wɧewww```~'b]UndeadPacks not Used^]ecClick and drag a UndeadPack to the right hand column to include that UndeadPack in ZombieBeatDown.]]UndeadPacks Used_]XClick and drag a UndeadPack to the left hand column to remove it from the UndeadPack list, or drag it up or down to re-order it in the UndeadPack list.L]*)Always use this UndeadPack configurationZ]IGIf checked, these UndeadPacks will always be used when starting games.[MEngine.Mutatorc\ U2LBg\fxxx.;9 }.;xxxx;(.;x.;x.;x.;x.;xx.;xxx.;x.;;(xxZlxxxZlxxZlxxxZl;(xx.;xxx.;.;xxx.;xxx.;Rxx.;xxx.;xxxxxx.;;(xxxxxxxx;(xxxxZlxxxxxxxxRxxxxxxx.;9 }.;xxxx;(.;x.;x.;x.;x.;xx.;xxx.;x.;;(xx3ÿxxx3ÿxx3ÿxxx3ÿ;(xx.;xxx.;.;xxx.;xxx.;Rxx.;xxx.;xxxxxx.;;(xxxxxxxx;(xxxx3ÿxxxxxxxxRxxxxxxx.;9 }.;xxxx;(.;x.;x.;x.;x.;xx.;xxx.;x.;;(xxZlxxxZlxxZlxxxZl;(xx.;xxx.;.;xxx.;xxx.;Rxx.;xxx.;xxxxxx.;;(xxxxxxxx;(xxxxZlxxxxxxxxRxxxxG] Survive for[ B p6/Chʍ9 }.;xflUxxxxxxxxxxDۗDۗDۇxxxxxxxxxxxxxxxxxxx;(`F H x#CDYǕ == R !t"ڏRùZlZlZlyrү=== R !t"ڏRùtttyrү=== R !t"ڏRùZlZlZlyrү=== R !t"ڏRù3ÿ3ÿ3ÿyrү=== R !t"ڏRùZlZlZlyrү=l$zCd$Ca"ojaI0)$?FSS^A@GsKW(S/s%6-KqI! a!>>qda!La&!}Kqa&!K ]| H8ga  #L?a<" @wg*g gg 6g 6g 6a $@a!H?= XMl2f Hjڦ?ʐ+X V|[$|[$|[$+X V|.Xڐ+X V|.Xڐ+X V|.Xڐ+X V|.Xڐ+X V|[$|[$|[$+X V|[$|[$|[$+Xʁ|.Xڐ+Xʁ|[$|[$|[$+X Vt_4+X V+X V+X V+Xʁtt|[$|[$|[$|.Xڐ+X V+X V+X V+Xʁ|[$tt|[$|[$|[$|.Xڐ+X V+X V+X V+Xʁtt|[$|[$|[$|.Xڷ_4_4_4ttt|[$|[$|[$|[$|[$|[$|[$|[$|[$|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڑ|[$|[$|[$+X|.Xڐ+X+X|.Xڎ|.Xڎ|.Xڎ|.Xڷ_4_4_4_4_4_4_4|[$+X V|[$|[$|[$|[$tttttt|[$+X V|[$|[$|[$|[$|[$+X V|[$|[$|[$|[$|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڐ+X V|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڐ+X V|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڐ+X V|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڐ+X V|.Xڑ|[$+X V|[$|[$|[$|[$+X V_4+X V+Xʁ|[$tt|[$|[$|[$|.Xڐ+X V_4+X V+Xʁtt|[$|[$|[$|.Xڷ_4+X V+Xʁtt|[$|[$|[$|.Xڥt+X V|[$+Xʁ|[$ V|[$ V|[$ V|.Xڐ+Xʁ|.Xڐ+X V|.Xڐ+X V|.Xڐ+X Vt|.Xڥt|.Xڐ+XHѣ|[$|[$|[$+XHѣ|.Xڐ+XHѣ|.Xڐ+XHѣ|.Xڐ+XHѣ|.Xڐ+XHѣ|[$|[$|[$+XHѣ|[$|[$|[$+Xʁ|.Xڐ+Xʁ|[$|[$|[$+XHѣt_4+XHѣ+XHѣ+XHѣ+Xʁtt|[$|[$|[$|.Xڐ+XHѣ+XHѣ+XHѣ+Xʁ|[$tt|[$|[$|[$|.Xڐ+XHѣ+XHѣ+XHѣ+Xʁtt|[$|[$|[$|.Xڷ_4_4_4ttt|[$|[$|[$|[$|[$|[$|[$|[$|[$|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڑ|[$|[$|[$+X|.Xڐ+X+X|.Xڎ|.Xڎ|.Xڎ|.Xڷ_4_4_4_4_4_4_4|[$+XHѣ|[$|[$|[$|[$tttttt|[$+XHѣ|[$|[$|[$|[$|[$+XHѣ|[$|[$|[$|[$|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڐ+XHѣ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڐ+XHѣ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڐ+XHѣ|.Xڎ|.Xڎ|.Xڎ|.Xڎ|.Xڐ+XHѣ|.Xڑ|[$+XHѣ|[$|[$|[$|[$+XHѣ_4+XHѣ+Xʁ|[$tt|[$|[$|[$|.Xڐ+XHѣ_4+XHѣ+Xʁtt|[$|[$|[$|.Xڷ_4+XHѣ+Xʁtt|[$|[$|[$|.Xڥt+XHѣ|[$+Xʁ|[$Hѣ|[$Hѣ|[$Hѣ|.Xڐ+Xʁ|.Xڐ+XHѣ|.Xڐ+XHѣ|.Xڐ+XHѣt|.Xڥt|.Xf~'W= Game Mode:s= DeathMatchsZombieBeatDowns GibCollectK]Choose The Game ModeD= TournamentE]nlIf checked, each player must indicate they are ready by clicking their fire button before the match begins._]Livesh]How many Lives everyone has.Q]Gibs{].-The Amount of Gibs to collect in GibCollect.C]! The rate that the Undead spawn.kMRate of Undeadl]32Amount of Gibs that spawn when someone is killed.uMAmount of Gibsa= Ai Zombiesr]ECCheck Ai Zombies if you want Ai Zombies to spawn out of carcasses.v] ExessiveModed]~ExessiveMode changes some of the skins and makes random events(exploding bodies, random tossed gibs, more kamizombies, etc.).B] ChainSawModem]b`ChainSawMode takes all of the weapons out of the level and makes everyone only have a chainsaw.~] DarkModet]=?H!- H=aK$? HDa!(Y? Hu>af$> Ca!k - H{>a!(k> ::!(+H>a!k>8a!(k ar$?'Ck?a!k \ubq@&zlH@&@}k@BWCU@qC&F/ vp@ZHwlIRdi}+X%6-iVI! a!>>Va&!%i @S@&V@&FM L9*a$@a!k333?= q]TfJ|v0@j@&RBE@b{E _rX W:*a$@a!V333?= k1@/@kv ^l^kgP@V@@@@\W26- #k!Sab$a!3>333?>!3?ab$a!3>333?! aj$a! >333? >a! >333??h AL @fh<4U:tի<tzD  MeGQ 2@K @\d[(*96- a!>> [oP}@YGMj3Ga&!j Jc). Wbh<af$a!(?= Dt { O E {2mn+ZU.;C]"!Everyone has joined the Zombies!ePyN`V[*JkU NN:*a $@a!Z333?= G_p.X%6-_VI! a!>>Va&!_ m@W@V |2wKZU.;C]'&You have survived the ZombieBeatDown!B@p{p te;Ka$@7?a!V333?=Ia!Z333?= QN?1;6- a!ff > MMhu5aAB,6- -'ae$P  a!S |f]UT@^Z@R@{[+F9o$a!?fff? 3Ady6a&!> N@Y@}KCi@&|dk&<a&!= p|We[Es S6@P@[@YK* L> TL@Nr 8w*$rN3]EUCa3a/!3,d3a/!>3,d3a/!<3,3a/!E3,d3a/!3, qH{JL^w^*l^a/!-r.^H.^ J!I*^^  eEeTG N`fb`SK@@?, ?,  S Ie3C6I-I!Oq!JAI { c K8t-'o$?9a!"aa!"aq!xa&!"L=o$ dH@\Mf T8 xGի?6GHC?,2ծL>T Gv6-? U ^ H$T60-]'Nq!D@-@@IpGame ended at U5w* .w *-J r  -' * Lq!D|'4-#w*->r*1]zw*c- w1+%(@@GpGame ended at Uw* .w *8-J r  -'kr  *  Lq!D|'4Uw*>->r*1w*- w1+%(i@@PpGame ended at U,w* .w *-J r  -'r  *  Lq!Dg|' pDED]FG \C~ P,wCr.C*(LCJRF'( ~{jJc{-r`* w{`=:{I{{ A FCy..U..%?,33?[z".a*(%?,?[y%("-T:"%:"&:",:",."-.a"(a0000|w"-y%aSUp;w6?,?,|?,;[aSUp("apSU /;w8?,i@|?,;[apSU /(ky%aSD";w6?,?,|?,;[aSD"("?&aSD";w6?,?,|?,;[aSD"(::$aS";w6?,?,|?,;[aS"( \ b l 07:1Z-$Zq!K!v!l u @}"3-D!" =a&!E@ h U - .-j/a0 ?>-.LE&a/! o;a +  #@&a/! RI:a ^  &ia/! 8a J  &a/! {8a d  &a/! Q8a }  &E,ka/!  #<a +  #@&a/! :a ^  &a/! Q:a J  &Ua/! 9a d  &a/! RI9a }  &>E, a/!  ף=a +  #@&>Wa/!  ף<a ^  &>a/!  #<a J  &>a/! ;a d  &>>a/!  ף;a }  &10-Qa/!  ף<a   #@a/! <a d  #@&/a0 <x-Q<a/!m-`.L =a + < & ף<a  < -Q<a/!; #=a ^ < <aw-`.L -Q<a/!ma + < .<a10/a0 - Y%a/!a/!<a/!Ea   4:,c,Pq:,c,P:,c%:,10+ w* a!q M M [ei.V[[_TU:yG[#?al$al$ K }$#a&!C} D bmIbK@#?L?aD~bի>@Ua !~--U$HBCCHB~,d#!, L \H.\,\I* v@ *Xz}TlRùR VZlR VR Vw4Zlw4Zlw4Zlw4Zlw4ZlR Vw4Zlw4Zlw4Zlw4Zlw4ZlR Vw4Zlw4Zlw4Zlw4Zlw4ZlR!ۏRHѣZlRHѣRHѣw4Zlw4Zlw4Zlw4Zlw4ZlRHѣw4Zlw4Zlw4Zlw4Zlw4ZlRHѣw4Zlw4Zlw4Zlw4Zlw4ZlwzW)$a&!Cz hX [&r]*]h  i a@\jNw*;---(a*w6w%6w%a+w ::$-Ja "-J$J$ -a  Pao$a'(( _ t7 =-::$::$'-^?&+ i%&w&*&-&?&&'7&&^a/!--'-'q!D(Y*=,{r*(-Ba  -B j'a+    # #M -(?&-'!r=a'''X-B -#Y*=,'r*(-Ba  -B j'a+    # #M -($P,P$$$P$a'''X-B ?&+ i%&hw&*Q&-&?&&'7&&a/!-$PVCorpseMania.GibThrower,PCCC$$$P$   a'''Y*=,r*(-Ba   -B j'a+    # #M -(?&$PVCorpseMania.GibThrower,PCCC$$$P$   a'''= a'''X-B h vP(6%6,1- Y%Y, C-Y%vWo--'-'w-(-(-]( r ./a0 .--.LI.E&{o a/! o; o&IM{{ a/! RI: {&I{@ a/! 8 @&I{~ a/! {8 ~&II{} a/! Q8 }&I.E,{o a/!  #< o&{{ a/! : {&h{@ a/! Q: @&{~ a/! 9 ~&{} a/! RI9 }&.E,{o a/!  ף= o&{{ a/!  ף< {&/{@ a/!  #< @&{~ a/! ; ~&{} a/!  ף; }&10 z J\.W..T..R   a'd / ?,?,'?,R a\-W% aAmt /'d 1 ?,i@'?,R aAmt / aMax'd 1 ?,33@'?,R aMaxSW% aFrags'd / ?,?,'?,R aFragsT-r' aGibs'd / ?,?,'?,R aGibs9 aLives'd / ?,?,'?,R aLives::$ a'd / ?,?,'?,R a \ t"?h-'#r*f.f]%.&q!R-'gt } j.jzL>?!C j{.>rj=a $a!szj{.>a!Dz>a!Cz LgxR 5b::$ xa "@O-x$x$ KQ [&rc*cK  k $T.r $-VLBVL=$--?&$-:,s:$,s$-:,s:$,s$-a/!$Ga/!$_$-$a/!G,$ ^$V$$-#-?&$8-:,s:$,s$-:,s:$,s$$-$a/!G,$ ^$V$$ -?&$h-:,s:$,s$$-$a/!G,$ ^$V$$ l 7n~h7%a  % #L?w*qK&K,K,.K,K, 6 6 6 %-%z-#%-%?%%?&-7-7?&w7% w7*7-7w%*r7* r7%-L%a/!.&v%a/!>.&%a/!<.&%a/!E.&%a/!.&n7% Z  O M C61>o$b>-'afCla!q!O z _Nk W_#9_333?a!=UU_a!L> e iQN#a\BHBa&!"i T Lp=*&r*Added none to team!!! [LI[=L[w* 2w* 2-J(-a/!l%.e:F&M-J-J'G&wG*G- wG3:G:1G-J(GGmJ-JF+,*[{DfwDf=L hn+'%w.h-8  M ed"<eD @uD?,?e,`D?,?uHD?,,sD?H,?,:-a ?,. ?u?e?   %$?, ]W tch% ubGva !X--v$HBCCHBX,d#!,t!O%6{6?-Ht ]t{ ~ o+r* z_%P,<sD??,<P%s%$P%rP, AP, 7a ?,B?A,AB?,PP, A2a ?,BAB?,7a ?,B?P,AB?,y2a ?,BAB?,?,2a ?,BBBAB?,As, :a ?,BA?AAB?,ss, A:a ?,BA?sAB?, d Qe:oQ- S-la  "@l=-'= n EQYVe n@\lNw*;---(a*e6e%6e%a+e ::$-^a "-^$^$ -a  Pno$a'(( N y>Z$,-: ,(q%q,rB*%BqIKqBqIq3y, y,yK- a/!p =, w* 2 +w* 2 ' a/! =y~w* 2 w* 2 ' a/!a. *: ,{ : IHyI,py ': , wB*B,K,K%pK '( } )=jN: - B%)w)*)-k)?&B)a/!l-Z'}))&Y%-+ w%)-'22- }&N+ m%)-]'-'r- -# },{lastmanstanding88-Z)8w)*X.)!wX*XX@rg*gX!!rX*X Xg)) cD ^X!a&!^ qxm/W m\o86-a!\@a!opmի>oga !p--g$HBCCHBp,d#!, z ]XDw.*"?!hvw.*6?p].?"?!h "I Xe?oX- S-pa  "@p=-'= m y Q^\ \.n\\pa + ?,\a @@w.*.-*D?zC?,K?a Z@(r* w*f.C.& ]%.&q!Y-'-'JZ- ?%. m-Y[- h o}tw*UX'X>a&!AoSFX333?a&!@oSa&!Do U IW*IZUkw***a/!p*a/!c:*-#*?6-#*$P*,P*$*$*$P*$* o -~3XSIwS*2Sa/!*-j'SS vw.-*.--'-i-a/!O-$-Q-a/!T- -a/!~- J-q4-a/!M-a/!C(J-a/!Q(- MS @8 xkի?6kHC?,2ծL>@ kv6-? `.R Y.s-6.$6.$6.$.JWOL?& 6.=,6.=,6.=, 6.$6.$6.$.%(.J?,W.s hgy b 08ll9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }npl`pp~/51r5*p- w5//-5-:/,s:5,s/a/!-./ u5p%- w5//-5-:/,s:5,sx/a/!-./ u5p%p i S6,>o$b>-'afSea!q!O t PGD - {a "@A-{$-V-'o$a(((-(|w*aa XcTe- Ht%Tr${T c,9.? U 9Tn~r,n9r99rn9rn&ctcTr FP7{Fr~F,yrTFFTFrFFr&9.? `Tw9*9SM W94pUnknown UndeadPack in UndeadPack list: T8?F a j ~f9G H c_(a|kd_aի>kSa !_--S$d>a!A333?>d333?a!@333?>a!D333?>a$a$ Nn&s'%w.N-8  lh~Zl=.ln:=T-un,D?n@~=%:=,sw* j=w* j==?&=s==sO=a  @lbL>f z_aAB26-!P !r -! a!>>a&! c Ncdg%+8-m-8-8?%8?&^-8a/!.&8a/!>.& 8a/!<.&48a/!E.&^8a/!.&-#N- N?6{gibcollectN8Hg= [ Yf_Ya  PbPY6ba+b]w.w*a*w J @vS@?, A.@rA*Y-y:@:$ e@ e? 'e@ {CDee? A2b33>e? N{u<{':@:$ _@ ?,d6_J>e?^@-y6_@@ u_ v _si00DBQ5rD*Failed to spawn bot(i:DD=,i,yDiyDhhh,h%Q jD'w* @DB,w* @DB' UOqFOovOApAuO%(6O$6O$6O$O AAj'O?,?, Ai' P Uko 9Uz-- - -- > E..UHUUadh[U>?Uh?@?UUad F a\>%ac>?Ba?a!Cc>za333?at$at$a!Jc>xafff?a!Dc>a&!E> O` J)r-Ja/!By.J-@(J?a??&??&6@ 6D?D?@ ?6??@ ?68JUO?%*w.J*-.J-UUw.J*-.J-v>?ףp? OmS)t-Sa/!By.S-@(S?a??&??&6@ 6D?D?@ ?6??@ ?68SUO?%*w.S*-.S-UUw.S*-.S-v>?ףp?  E: E7EL>a!J?L>[E>a!D?L>E #?a!E?L>E@?aE$aE$a!I?L>a!C?L> yVR/($:VB'( N rf&krRMuD @VD?,?u,DD?,?VXD?,,QD?X,!?X?!?Q!B pB? ?V AB?HB?D?X?B?Q(?X?(B(?QCB?C?DB??V:B?:?V0B?0?V1B?1?V2B?2?D@C?B?Qiw*a ?D wA\A%w{  Gl V2y qM.'l.'l.'l.'l.'l.'l.'lВ.'l.'lВ.'l.'lo o o o '[AO]Configure UndeadPacksT Z l4:1M-$Mq!A!v!l k[ A 5-'a!oaao$?9a!"aaq!xa&!iL=o$ db@xF ]QgyB]]]5un-]/5ppSurvive for SY minutesu-#](5ppCollect S6 gibsu]35Be the last to not join the Zombies!u::$]5u@@-]5u hcYcMJF$D:F,:z:FIcFF=, LxV\z..-<xx?|x?,|x?,z%ox@|x ]T~ D,wTr.T*(TL\ x xa  ?,a @@w.*.-*D?zC?,K?a JVN.#j6- W>?N!- N=aK$? HDa!Y? Nu>af$> Ca!iW - N{>a!W> ::!(+N>a!iW>8a!W ar$?'CW?a!W q IGQ G..c%cI&wcUc&zUIcwsUPwscscscc% OGy k:G6-uk,D?k@h?sk:GwG*G?h @:G,<hL@h?,hhAC<h@@ ~g ` @xYC#?L?aDLxի>C` 6-!7`{.>!`{.>`?a!7a!>!`{.>66!%`{.>`?a!a !L--HBCCHBL,d#!,>a!%a !L--HBCCHBL,d#!, R KO4 FQNf WQ#9Q333?a!=UUQa!L> c K y2 G 8a ^yO9 }ѸB9 }9 }ѸB9 }9 }ѸB9 }9 }a"gHhH`TklmnG]%o got a taste of %k's gib.^g]You got the Gib Throw.E] Gib Throwz:p?Yi$ #<][b$?\1S @6z; ,L??,@@66L?/DMM?^w*---(a*M?,x-(v!6ggM?,M?L?g::$-- ffAa,R @A*::$r*-fa "-f$f$*- - ff&?a  P@ ~{ _ 3f_ 6-a!7_{.>||!_{.>_?a!7a!d!_{.>!%_{.>(_?a!a!--da!%a!-- X bt[ba/!$4ba/!$fba/!w:b,s$ba/!-$b-:b,d$$ B E RYa d]9M.&M& 33@?]%M,r.* L>q!E:.%q!E !dKM\ aD @fD?,?a,TD?,?fuD?,,gD?u,SD?,eD?S?,(-(!. ?f AB?! Q!  !%!Z(! w%Y! w&Y!w,Y?,. ?T8B?T?W?A&AY #?Appp [SA]:  % . ?f8B?a? R  Y % _' \, $. ?gB?u?W?@@&RE #?| pppm [SR%]:  u%(. ?gB?u?(W?@&|K( #?|( pppE [S|%]:(  t(%C. ?TBB?C bC  PC%C$:. ?f C?a?: ^:  p:%:--`:$0. ?f>C?a?0 J0  V0%0--Q0$1. ?f/C?a?1 f1  L1%1--i1$2. ?T CB?2 `2  }2%2--q2$. ?g C?a?WAaD,L #?pppB [S]:  x%C-(' -!z&-'D R  Y   -#!z,-(% e  ~    !z%-(% R  Y    ##S6##?#? E'(#? K'#? L'C--0--Q1--i2--q    -' ^ je(!:wj*w.j*`j?m>??6ja/!\a::$je:jj Gk IQ[aAB26-I~V! a!>>~qw*a&!BI~a&!I FV n Hs\a  #L?a<" @w\*\ \\ 6\ 6\ 6a $@a!H?= oZaO#q,rZ rZ*w.Z* IZ-$ddr.Z*ZXZ ff d}eX%6-dVI! a!>>Va&!%d }D6z9 ,L??,DD66L?/DWW?^w*---(a*W?,x-(v!6ggW?,W?L?g::$-- ffAa,g @A*::$r*-Ha "-H$H$*- - ff&?a  PD JW @T 2l======{ R P]>f-<=f ]m FcWvdF!O%6s6?-HF ]Fs nIna/!Mna/!Dna/!Sna/!Kna/!@na/!I(' Tb [&rh*hT  vUg/PU66E66{E@ E(' Gh CQ}F aAB26-C~V! a!>>~qw*a&!BC~a&!C Q Ot$Oa/!$4Oa/!$fOa/!w:O,s$Oa/!-$$ rFNGk..+rk* FaCorpse Mania f mKm.Mwm*VzIImvIppI,mm.m(PI x b["hb 8%pl has joined the zombiesc `&pl is the Slayerc   y ^ A_ {pl.;.;Ep BWf s%6-BqI! a!>>qda!La&!}Bqa&!B C XO#Xn %** II } _[v #L?FvYF?(vvFDիL?vիL?#?^aX\DծvD(#@@@r^* qj [/G[Y|86-a!\@a!oL[ի>|a!L-- ] vp/Xvtt S$v MHP-H-P V  tm_"8a\BHB6!" -a&!"m w npU|, - npp $n A!Q R D cS tCA R (c :s 0v 1g 2y M  G ~Cxp@--#~?&(~B zR _oaAB26-!P !r -! a!>>a&! s z GD - }a "@A-}$-V-'o$a(((-(|w*aa \ Om=DOn|#?L?aDyOի>|a!y-- g UA?q=)-#U?6U IXq(OrWuXAWXZW LRhR 7b::$ ha "@O-h$h$ @ Ff:_Fa  PvPF6va+v]w.P*a*P ] Sd+xFTb?Kxի>TSa !KzDK('wS*So$ sZ ^ X%6-^VI! a!>>Va&!^ r } qq DB$'oiF -q -q'a?' [ W%&a $? C _Xg//============================================================================= // ZombieNaliRabbit. //============================================================================= class ZombieNaliRabbit expands NaliRabbit; @ l 0 ) { if ( UTHumanCarcass(Other) != None ) bGreenBlood = UTHumanCarcass(Other).bGreenBlood; else if ( (UTCreatureChunks(Other) != None) ) bGreenBlood = UTCreatureChunks(Other).bGreenBlood; } if ( FRand() < 0.3 ) Buoyancy = 1.06 * Mass; // float corpse else Buoyancy = 0.94 * Mass; } function ChunkUp(int Damage) { local UT_BloodBurst b; if (bHidden) return; b = Spawn(class 'UT_BloodBurst',,,,rot(16384,0,0)); if ( bGreenBlood ) b.GreenBlood(); if (bPlayerCarcass) { bHidden = true; SetPhysics(PHYS_None); SetCollision(false,false,false); bProjTarget = false; if ( Trail != None ) Trail.Destroy(); } else destroy(); } simulated function Landed(vector HitNormal) { local rotator finalRot; local UT_BloodBurst b; local actor a; if ( trail != None ) { if ( Level.bHighDetailMode && !Level.bDropDetail ) bUnlit = false; trail.Destroy(); trail = None; } finalRot = Rotation; finalRot.Roll = 0; finalRot.Pitch = 0; setRotation(finalRot); if ( (Level.NetMode != NM_DedicatedServer) && !Level.bDropDetail ) { b = Spawn(class 'UT_BloodBurst',,,,rot(0,0,0)); if ( bGreenBlood ) b.GreenBlood(); b.RemoteRole = ROLE_None; if ( !bGreenBlood ) Spawn(class'BloodSplat',,,Location,rotator(HitNormal)); } SetPhysics(PHYS_None); SetCollision(true, false, false); } simulated function HitWall(vector HitNormal, actor Wall) { local float speed, decision; local UT_BloodBurst b; local actor a; Velocity = 0.8 * (Velocity - 2 * HitNormal * (Velocity Dot HitNormal)); Velocity.Z = FMin(Velocity.Z * 0.8, 700); speed = VSize(Velocity); if ( speed < 350 ) { if ( trail != None ) { if ( Level.bHighDetailMode && !Level.bDropDetail ) bUnlit = false; trail.Destroy(); trail = None; } if ( speed < 120 ) { bBounce = false; Disable('HitWall'); } } else if ( speed > 150 ) { if ( speed > 700 ) velocity *= 0.8; if ( (Level.NetMode != NM_DedicatedServer) && Level.bHighDetailMode && !Level.bDropDetail && (LifeSpan < 19.3) ) PlaySound(HitSounds[Rand(4)],,12); } if ( (Level.NetMode != NM_DedicatedServer) ) { if ( (trail == None) && !Level.bDropDetail ) { b = Spawn(class 'UT_BloodBurst',,,,Rot(0,0,0)); if ( bGreenBlood ) b.GreenBlood(); b.RemoteRole = ROLE_None; } if ( !bGreenBlood && (!Level.bDropDetail || (FRand() < 0.65)) ) Spawn(class'BloodSplat',,,Location,rotator(HitNormal)); } } L !P m// // CTF Messages // // // Switch 4: Has the flag. // RelatedPRI_1 is the holder. // OptionalObject is the flag's team teaminfo. class SlayerMessage extends CriticalEventPlus; var color greenColor, whiteColor; static function color GetColor( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2 ) { if (Switch == 0) return Default.greenColor; else return Default.whiteColor; } static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { switch (Switch) { // You have been zombified. case 0: return RelatedPRI_1.PlayerName$" has joined the zombies"; break; // The enemy has your flag! case 1: return RelatedPRI_1.PlayerName$" is the Slayer"; break; } return ""; } }~k EJ4-%?m>??6( gK H* d]  -n 0 ) { if ( UTHumanCarcass(Other) != None ) bGreenBlood = UTHumanCarcass(Other).bGreenBlood; else if ( (UTCreatureChunks(Other) != None) ) bGreenBlood = UTCreatureChunks(Other).bGreenBlood; } if ( FRand() < 0.3 ) Buoyancy = 1.06 * Mass; // float corpse else Buoyancy = 0.94 * Mass; } function ChunkUp(int Damage) { local UT_BloodBurst b; if (bHidden) return; b = Spawn(class 'UT_BloodBurst',,,,rot(16384,0,0)); if ( bGreenBlood ) b.GreenBlood(); if (bPlayerCarcass) { bHidden = true; SetPhysics(PHYS_None); SetCollision(false,false,false); bProjTarget = false; if ( Trail != None ) Trail.Destroy(); } else destroy(); } simulated function Landed(vector HitNormal) { local rotator finalRot; local UT_BloodBurst b; local actor a; if ( trail != None ) { if ( Level.bHighDetailMode && !Level.bDropDetail ) bUnlit = false; trail.Destroy(); trail = None; } finalRot = Rotation; finalRot.Roll = 0; finalRot.Pitch = 0; setRotation(finalRot); if ( (Level.NetMode != NM_DedicatedServer) && !Level.bDropDetail ) { b = Spawn(class 'UT_BloodBurst',,,,rot(0,0,0)); if ( bGreenBlood ) b.GreenBlood(); b.RemoteRole = ROLE_None; if ( !bGreenBlood ) Spawn(class'BloodSplat',,,Location,rotator(HitNormal)); } SetPhysics(PHYS_None); SetCollision(true, false, false); } simulated function HitWall(vector HitNormal, actor Wall) { local float speed, decision; local UT_BloodBurst b; local actor a; Velocity = 0.8 * (Velocity - 2 * HitNormal * (Velocity Dot HitNormal)); Velocity.Z = FMin(Velocity.Z * 0.8, 700); speed = VSize(Velocity); if ( speed < 350 ) { if ( trail != None ) { if ( Level.bHighDetailMode && !Level.bDropDetail ) bUnlit = false; trail.Destroy(); trail = None; } if ( speed < 120 ) { bBounce = false; Disable('HitWall'); } } else if ( speed > 150 ) { if ( speed > 700 ) velocity *= 0.8; if ( (Level.NetMode != NM_DedicatedServer) && Level.bHighDetailMode && !Level.bDropDetail && (LifeSpan < 19.3) ) PlaySound(HitSounds[Rand(4)],,12); } if ( (Level.NetMode != NM_DedicatedServer) ) { if ( (trail == None) && !Level.bDropDetail ) { b = Spawn(class 'UT_BloodBurst',,,,Rot(0,0,0)); if ( bGreenBlood ) b.GreenBlood(); b.RemoteRole = ROLE_None; } if ( !bGreenBlood && (!Level.bDropDetail || (FRand() < 0.65)) ) Spawn(class'BloodSplat',,,Location,rotator(HitNormal)); } } sr ]//============================================================================= // ut_grenade2. //============================================================================= class ut_grenade2 expands ut_grenade; Y gS;/-i1- C `;E Pb726R3//============================================================================= // ZombieMGib. //============================================================================= class ZombieMGib expands UT_BioGel; function Timer() { local CorpseGameReplicationInfo CGRI; CGRI = corpsegameReplicationInfo(Level.Game.GameReplicationInfo); if (CGRI.UndeadAmount < CGRI.MaxUndead){ spawn(class'Zombie',,,Location + SurfaceNormal*8); CGRI.UndeadAmount++; } PlaySound (MiscSound,,3.0*DrawScale); if ( (Mover(Base) != None) && Mover(Base).bDamageTriggered ) Base.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType); HurtRadius(damage * Drawscale, FMin(250, DrawScale * 75), MyDamageType, MomentumTransfer * Drawscale, Location); Destroy(); } simulated function SetWall(vector HitNormal, Actor Wall) { local vector TraceNorm, TraceLoc, Extent; local actor HitActor; local rotator RandRot; SurfaceNormal = HitNormal; spawn(class'BloodSplat',,,Location, rotator(SurfaceNormal)); RandRot = rotator(HitNormal); RandRot.Roll += 32768; SetRotation(RandRot); if ( Mover(Wall) != None ) SetBase(Wall); } auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { if ( Pawn(Other)!=Instigator || bOnGround) Global.Timer(); } simulated function HitWall( vector HitNormal, actor Wall ) { SetPhysics(PHYS_None); MakeNoise(0.3); bOnGround = True; PlaySound(ImpactSound); SetWall(HitNormal, Wall); PlayAnim('Still'); GoToState('OnSurface'); } simulated function ZoneChange( Zoneinfo NewZone ) { local waterring w; if (!NewZone.bWaterZone) Return; if (!bOnGround) { w = Spawn(class'WaterRing',,,,rot(16384,0,0)); w.DrawScale = 0.1; } bOnGround = True; Velocity=0.1*Velocity; } function Timer() { GotoState('Exploding'); } function BeginState() { if ( Role == ROLE_Authority ) { Velocity = Vector(Rotation) * Speed; Velocity.z += 120; if( Region.zone.bWaterZone ) Velocity=Velocity*0.7; } if ( Level.NetMode != NM_DedicatedServer ) RandSpin(100000); LoopAnim('Still',0.4); bOnGround=False; PlaySound(SpawnSound); } } state OnSurface { function ProcessTouch (Actor Other, vector HitLocation) { GotoState('Exploding'); } simulated function CheckSurface() { local float DotProduct; DotProduct = SurfaceNormal dot vect(0,0,-1); If( DotProduct > 0.7 ) PlayAnim('Still',0.1); else if (DotProduct > -0.5) PlayAnim('Still',0.2); } function Timer() { if ( Mover(Base) != None ) { WallTime -= 0.2; if ( WallTime < 0.15 ) Global.Timer(); else if ( VSize(Location - Base.Location) > BaseOffset + 4 ) Global.Timer(); } else Global.Timer(); } function BeginState() { wallTime = 3.8; MyFear = Spawn(class'BioFear'); if ( Mover(Base) != None ) { BaseOffset = VSize(Location - Base.Location); SetTimer(0.2, true); } else SetTimer(wallTime, false); } simulated function AnimEnd() { if ( !bCheckedSurface && (DrawScale > 1.0) ) CheckSurface(); bCheckedSurface = true; } } QA J M S @@v D6/6J  MffD Pw*a v//============================================================================= // CMOutMessage. //============================================================================= class CMOutMessage expands CriticalEventLowPlus; var() localized string OutMessage; static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { if (RelatedPRI_1 == None) return ""; return RelatedPRI_1.PlayerName@Default.OutMessage; } oyG_9//============================================================================= // CorpseManiaHUD. //============================================================================= class CorpseManiaHUD expands ChallengeHUD; var color LightCyanColor; var int OrderedNums[20]; simulated function DrawGameSynopsis(Canvas Canvas) { ; // do nothing we don't need it } function Timer() { Super.Timer(); if ( (PlayerOwner == None) || (PawnOwner == None) ) return; } simulated function DrawFragCount(Canvas Canvas) { local float Y; local TournamentGameReplicationInfo TGRI; TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if ( bHideAllWeapons || (HudScale * WeaponScale * Canvas.ClipX <= Canvas.ClipX - 256 * Scale) ) Y = Canvas.ClipY - 128 * Scale; else Y = Canvas.ClipY - 192 * Scale; if (TGRI.TimeLimit > 0) DrawTimeAt(Canvas, 2, Y); Super.DrawFragCount(Canvas); } simulated function DrawTimeAt(Canvas Canvas, float X, float Y) { local int Minutes, Seconds, d; if ( PlayerOwner.GameReplicationInfo == None ) return; Canvas.DrawColor = HUDColor; Canvas.CurX = X; Canvas.CurY = Y; Canvas.Style = Style; if ( PlayerOwner.GameReplicationInfo.RemainingTime > 0 ) { Minutes = PlayerOwner.GameReplicationInfo.RemainingTime/60; Seconds = PlayerOwner.GameReplicationInfo.RemainingTime % 60; } else { Minutes = 0; Seconds = 0; } if ( Minutes > 0 ) { if ( Minutes >= 10 ) { d = Minutes/10; Canvas.DrawTile(Texture'BotPack.HudElements1', Scale*25, 64*Scale, d*25, 0, 25.0, 64.0); Canvas.CurX += 7*Scale; Minutes= Minutes - 10 * d; } else { Canvas.DrawTile(Texture'BotPack.HudElements1', Scale*25, 64*Scale, 0, 0, 25.0, 64.0); Canvas.CurX += 7*Scale; } Canvas.DrawTile(Texture'BotPack.HudElements1', Scale*25, 64*Scale, Minutes*25, 0, 25.0, 64.0); Canvas.CurX += 7*Scale; } else { Canvas.DrawTile(Texture'BotPack.HudElements1', Scale*25, 64*Scale, 0, 0, 25.0, 64.0); Canvas.CurX += 7*Scale; } Canvas.CurX -= 4 * Scale; Canvas.DrawTile(Texture'BotPack.HudElements1', Scale*25, 64*Scale, 32, 64, 25.0, 64.0); Canvas.CurX += 3 * Scale; d = Seconds/10; Canvas.DrawTile(Texture'BotPack.HudElements1', Scale*25, 64*Scale, 25*d, 0, 25.0, 64.0); Canvas.CurX += 7*Scale; Seconds = Seconds - 10 * d; Canvas.DrawTile(Texture'BotPack.HudElements1', Scale*25, 64*Scale, 25*Seconds, 0, 25.0, 64.0); Canvas.CurX += 7*Scale; } function PostRender(canvas C) { local int gamestate; local string slayermessage; local float XL, YL; local float ypos; local inventory Inv; local string stuff; local int invcount; local amplifier A; local corpseGameReplicationInfo corpseGameRep; Super.PostRender(C); if ( !( !bHideFaces && !PlayerOwner.bShowScores && !bForceScores && !bHideHUD && !PawnOwner.PlayerReplicationInfo.bIsSpectator && (Scale >= 0.4) ) ) { return; // don't draw over the scoreboard n stuff } corpseGameRep = corpseGameReplicationInfo ( PlayerPawn(Owner).GameReplicationInfo ); C.Font = MyFonts.GetBigFont( C.ClipX ); C.StrLen( slayerMessage, XL, YL ); C.SetPos(0.5 * C.ClipX - ( XL * 0.5 ) ,0.75 * C.ClipY); C.DrawText(slayermessage); } function SortScores(int N) { local int I, J, Max, tempVal; local corpseGameReplicationInfo corpseGameRep; corpseGameRep = corpseGameReplicationInfo( playerpawn(owner).GameReplicationInfo ); for ( I=0; Ina!@ > ^ D y;/-q2- l R8cED+pppm [SD%]: f3m//============================================================================= // Ghost. //============================================================================= class Ghost expands Zombie; function PreSetMovement() { bCanJump = true; bCanWalk = true; bCanSwim = false; bCanFly = true; bCanDuck = true; MinHitWall = -0.6; if (Intelligence > BRAINS_Reptile) bCanOpenDoors = true; if (Intelligence == BRAINS_Human) bCanDoSpecial = true; } function SetMovementPhysics() { SetPhysics(PHYS_Flying); } singular function Falling() { SetPhysics(PHYS_Flying); } function PlayWaiting() { local float decision; local float animspeed; if (Region.Zone.bWaterZone) { PlaySwimming(); return; } animspeed = 0.4 + 0.6 * FRand(); decision = FRand(); if ( AnimSequence == 'Breath2' ) { if (!bQuiet && (decision < 0.12) ) { PlaySound(Cough,Slot_Talk,1.0,,800); LoopAnim('TreadSm', 0.85); return; } else if (decision < 0.24) { PlaySound(Sweat,Slot_Talk,0.3,,300); LoopAnim('TreadLg', animspeed); return; } else if (!bQuiet && (decision < 0.34) ) { PlayAnim('TreadSm', animspeed, 0.3); return; } } else if ( AnimSequence == 'Look' ) { if (decision < 0.3) PlayAnim('TreadLg', animspeed, 0.3); else { PlayAnim('TreadSm', animspeed); } return; } PlaySound(Breath,SLOT_Talk,0.5,true,500,animspeed * 1.5); LoopAnim('TreadSm', animspeed); } function PlayPatrolStop() { PlayWaiting(); } function PlayWaitingAmbush() { if (Region.Zone.bWaterZone) { PlaySwimming(); return; } LoopAnim('Breath2', 0.4 + 0.3 * FRand()); } function PlayDive() { TweenToSwimming(0.2); } function TweenToFighter(float tweentime) { if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else TweenAnim('RightHit', tweentime); } function TweenToRunning(float tweentime) { setcollisionsize(17,39); if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if ( ((AnimSequence != 'Run') && (AnimSequence != 'RunFire')) || !bAnimLoop) { if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else TweenAnim('TreadSm', tweentime); } } function TweenToWalking(float tweentime) { setcollisionsize(17,39); if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else if ( Weapon != None ) TweenAnim('WalkTool', tweentime); else TweenAnim('TreadSm', tweentime); } function TweenToWaiting(float tweentime) { if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else TweenAnim('Breath2', tweentime); } function TweenToPatrolStop(float tweentime) { if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else if ( IsInState('Guarding')) TweenAnim('Breath1', tweentime); else TweenAnim('Breath2', tweentime); } function PlayRunning() { if ( AnimSequence == 'Belch' ) LoopAnim('TreadSm', -1.0/AirSpeed, 0.5, 0.4); else LoopAnim('TreadSm', -1.0/AirSpeed,, 0.4); } function PlayCombatMove() { if (Region.Zone.bWaterZone) { PlaySwimming(); return; } LoopAnim('TreadSm', -1.3/GroundSpeed,,0.4); } function PlayWalking() { LoopAnim('TreadSm', -1.0/AirSpeed,, 0.4); } function PlayThreatening() { if (Region.Zone.bWaterZone) { PlaySwimming(); return; } Acceleration = vect(0,0,0); if (AnimSequence == 'Backup') { PlaySound(Cringe, SLOT_Talk); LoopAnim('Cringe', 0.4 + 0.7 * FRand(), 0.4); } else if (AnimSequence == 'Cringe') { if ( FRand() < 0.6 ) PlaySound(Cringe, SLOT_Talk); LoopAnim('Cringe', 0.4 + 0.7 * FRand()); } else if (AnimSequence == 'Bowing') { PlaySound(Bowing, SLOT_Talk); LoopAnim('Bowing', 0.4 + 0.7 * FRand()); } else if (FRand() < 0.4) LoopAnim('Bowing', 0.4 + 0.7 * FRand(), 0.5); else PlayRetreating(); } function PlayRetreating() { setcollisionsize(17,39); if (Region.Zone.bWaterZone) { PlaySwimming(); return; } bAvoidLedges = true; PlaySound(Backup, SLOT_Talk); DesiredRotation = Rotator(Enemy.Location - Location); DesiredSpeed = WalkingSpeed; Acceleration = AccelRate * Normal(Location - Enemy.Location); LoopAnim('Backup'); } function PlayTurning() { TweenAnim('TreadSm', 0.3); } function PlayDying(name DamageType, vector HitLoc) { //first check for head hit if ( ((DamageType == 'Decapitated') || (HitLoc.Z - Location.Z > 0.5 * CollisionHeight)) && !Level.Game.bVeryLowGore ) { PlayHeadDeath(DamageType); return; } Super.PlayDying(DamageType, HitLoc); } function PlayHeadDeath(name DamageType) { local BigGib carc; carc = Spawn(class 'BigGib',,, Location + CollisionHeight * vect(0,0,0.8), Rotation + rot(3000,0,16384) ); if (carc != None) { carc.Mesh = mesh'NaliHead'; carc.Initfor(self); carc.Velocity = Velocity + VSize(Velocity) * VRand(); carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z); } PlaySound(sound'Death2n', SLOT_Talk, 4 * TransientSoundVolume); PlayAnim('Dead4',0.5, 0.1); } function PlayBigDeath(name DamageType) { PlaySound(Die, SLOT_Talk, 4 * TransientSoundVolume); PlayAnim('Dead5',0.7, 0.1); } function PlayLeftDeath(name DamageType) { PlaySound(sound'Death2n', SLOT_Talk, 4 * TransientSoundVolume); PlayAnim('Dead2',0.7, 0.1); } function PlayRightDeath(name DamageType) { PlaySound(Die, SLOT_Talk, 4 * TransientSoundVolume); PlayAnim('Dead3',0.7, 0.1); } function PlayGutDeath(name DamageType) { PlaySound(Die, SLOT_Talk, 4 * TransientSoundVolume); if ( FRand() < 0.5 ) PlayAnim('Dead3',0.7, 0.1); else PlayAnim('Dead2',0.7, 0.1); } function PlayLanded(float impactVel) { TweenAnim('HeadHit', 0.1); } function PlayVictoryDance() { PlaySound(Sweat, SLOT_Talk); PlayAnim('Look', 1.0, 0.1); } function ClawDamageTarget() { MeleeDamageTarget(ClawDamage, (ClawDamage * 1000.0 * Normal(Target.Location - Location))); } function PlayMeleeAttack() { local float decision; decision = FRand(); Acceleration = AccelRate * Normal(Target.Location - Location); //log("Start Melee Attack"); if ( Region.Zone.bWaterZone ) { if (AnimSequence == 'LeftHit') decision += 0.17; else if (AnimSequence == 'HeadHit') decision -= 0.17; if (decision < 0.5) PlayAnim('LeftHit'); else PlayAnim('HeadHit'); } else { if (AnimSequence == 'HeadHit') decision += 0.17; else if (AnimSequence == 'RightHit') decision -= 0.17; if (decision < 0.5) { PlayAnim('HeadHit'); spawn(RangedProjectile ,self,'',Location,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); } else { PlayAnim('RightHit'); spawn(RangedProjectile ,self,'',Location,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); } } } function bool CanFireAtEnemy() { local vector HitLocation, HitNormal, EnemyDir, projStart; local actor HitActor; local float EnemyDist; EnemyDir = Enemy.Location - Location + Enemy.CollisionHeight * vect(0,0,0.8); EnemyDist = VSize(EnemyDir); if (EnemyDist > 950) //FIXME - what is right number? return false; EnemyDir = EnemyDir/EnemyDist; projStart = Location + 0.8 * CollisionRadius * EnemyDir + 0.8 * CollisionHeight * vect(0,0,1); HitActor = Trace(HitLocation, HitNormal, projStart + (MeleeRange + Enemy.CollisionRadius) * EnemyDir, projStart, false, vect(6,6,4) ); return (HitActor == None); } function ShootTarget() { FireProjectile( vect(1, 0, 0.8), 900); spawn(RangedProjectile ,self,'',Location,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); } function PlayRangedAttack() { if (Region.Zone.bWaterZone) PlayAnim('Victory1L'); else PlayAnim('Wave'); spawn(RangedProjectile ,self,'',Location,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); } function PlayMovingAttack() { PlayRangedAttack(); } function PlaySwimming() { Acceleration = WaterSpeed * VRand(); Velocity = Acceleration; SetPhysics(PHYS_Falling); LoopAnim('TreadSm', 0.5 + 0.9 * FRand()); } function TweenToSwimming(float TweenTime) { TweenAnim('TreadSm', TweenTime); } state MeleeAttack { ignores SeePlayer, HearNoise, Bump; function PlayMeleeAttack() { if ( Region.Zone.bWaterZone && !bFirstAttack && (FRand() > 0.4 + 0.17 * skill) ) { PlayAnim('TreadSm'); } else Global.PlayMeleeAttack(); bFirstAttack = false; } function BeginState() { Super.BeginState(); bCanStrafe = True; bFirstAttack = True; } function EndState() { Super.EndState(); bCanStrafe = false; } } state Roaming { ignores EnemyNotVisible; function PickDestination() { Super.PickDestination(); bHasWandered = true; } } state Wandering { ignores EnemyNotVisible; function PickDestination() { Super.PickDestination(); bHasWandered = true; } } hdA cP. L Yc [U596- a!>> de K` L> Y@Q` e| L0!wa!?>Ja! > ~i N% ;6- a!ff > @j g a! > Mk \6- #k!Sab$a!3>333?>!3?ab$a!3>333?! aj$a! >333? >a! >333??h OWda&!> \~ kP q L3*a$@a!k333?= rp s N *a $@a!Z333?= {r u WK*a$@a!V333?= |t w tKa$@7?a!V333?=Ia!Z333?= Wv y k!a&!= fx b&af$a!(?= Qz h,54U:tի<tzD  ZX| ` c9cKD((+pppE [SD(%]: H b mkN#?L?aDa!-- qA /qy`"6-a!\*a!Ta!-- [B Czd / MC  9o$a!?fff? x TV33@ NV I KK#w ![K6- ->>{.>a!Q8 ->( vG !"v-'->' oH T#o-( qF K V#`]#`-Z' lJ M Tg$]]1$]-Z' [a-'-'-(-'-'I::$-'_::$-' 3t//============================================================================= // CMLossMessage. //============================================================================= class CMLossMessage expands CriticalEventLowPlus; var() localized string OutMessage; static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { if (RelatedPRI_1 == None) return ""; return RelatedPRI_1.PlayerName@Default.OutMessage; } ; u|0//============================================================================= // TossedGib. //============================================================================= class TossedGib expands UT_BioGel; function Timer() { local UT_BloodPuff f; f = spawn(class'UT_BloodPuff',,,Location + SurfaceNormal*8); PlaySound (MiscSound,,3.0*DrawScale); if ( (Mover(Base) != None) && Mover(Base).bDamageTriggered ) Base.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType); HurtRadius(damage * Drawscale, FMin(250, DrawScale * 75), MyDamageType, MomentumTransfer * Drawscale, Location); Destroy(); } simulated function SetWall(vector HitNormal, Actor Wall) { local vector TraceNorm, TraceLoc, Extent; local actor HitActor; local rotator RandRot; SurfaceNormal = HitNormal; spawn(class'BloodSplat',,,Location, rotator(SurfaceNormal)); RandRot = rotator(HitNormal); RandRot.Roll += 32768; SetRotation(RandRot); if ( Mover(Wall) != None ) SetBase(Wall); } auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { if ( Pawn(Other)!=Instigator || bOnGround) Global.Timer(); } simulated function HitWall( vector HitNormal, actor Wall ) { SetPhysics(PHYS_None); MakeNoise(0.3); bOnGround = True; PlaySound(ImpactSound); SetWall(HitNormal, Wall); PlayAnim('Still'); GoToState('OnSurface'); } simulated function ZoneChange( Zoneinfo NewZone ) { local waterring w; if (!NewZone.bWaterZone) Return; if (!bOnGround) { w = Spawn(class'WaterRing',,,,rot(16384,0,0)); w.DrawScale = 0.1; } bOnGround = True; Velocity=0.1*Velocity; } function Timer() { GotoState('Exploding'); } function BeginState() { if ( Role == ROLE_Authority ) { Velocity = Vector(Rotation) * Speed; Velocity.z += 120; if( Region.zone.bWaterZone ) Velocity=Velocity*0.7; } if ( Level.NetMode != NM_DedicatedServer ) RandSpin(100000); LoopAnim('Still',0.4); bOnGround=False; PlaySound(SpawnSound); } } state OnSurface { function ProcessTouch (Actor Other, vector HitLocation) { GotoState('Exploding'); } simulated function CheckSurface() { local float DotProduct; DotProduct = SurfaceNormal dot vect(0,0,-1); If( DotProduct > 0.7 ) PlayAnim('Still',0.1); else if (DotProduct > -0.5) PlayAnim('Still',0.2); } function Timer() { if ( Mover(Base) != None ) { WallTime -= 0.2; if ( WallTime < 0.15 ) Global.Timer(); else if ( VSize(Location - Base.Location) > BaseOffset + 4 ) Global.Timer(); } else Global.Timer(); } function BeginState() { wallTime = 3.8; MyFear = Spawn(class'BioFear'); if ( Mover(Base) != None ) { BaseOffset = VSize(Location - Base.Location); SetTimer(0.2, true); } else SetTimer(wallTime, false); } simulated function AnimEnd() { if ( !bCheckedSurface && (DrawScale > 1.0) ) CheckSurface(); bCheckedSurface = true; } } cnT U @v//============================================================================= // CmWinMessage. //============================================================================= class CmWinMessage expands CriticalEventLowPlus; var() localized string OutMessage; static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { if (RelatedPRI_1 == None) return ""; return RelatedPRI_1.PlayerName@Default.OutMessage; } |]b v:/-Q0- [ \ @u _ @E//============================================================================= // CorpseMania. // Created by HOB //============================================================================= class CorpseMania expands DeathMatchPlus; var() localized string Zombified; var() config int TimeLimit; // time limit in minutes var() localized string AltStartupMessage; var() config int Lives; var PlayerPawn LocalPlayer; var int TotalKills, NumZombies; var config int MaxUndead; // Max Undead var config int AmountofUndead; var config int AmountofGibs; var config bool bNoWeapons; // ChainSawMode var config bool bslayer; // Slayer var config bool bZombieBeatdown; //ZombieBeatdown var config bool bGibCollect; //GibCollect var config bool darkmode; // Darkmode var config bool ExessiveMode; //ExessiveMode var config bool aizombies; //Ai Zombies var bool beveryonezombie, bUndeadPack; var int PlayerTeamNum; var TeamInfo Teams[4]; // Red, Blue, Green, Gold var byte TEAM_Red, TEAM_Blue, TEAM_Green, TEAM_Gold; var int NextBotTeam; var() localized string GameEndedMessage; //zombiebeatdown win message var() localized string GameEndedMessage2; //deathmatch win message var() localized string GameEndedMessage3; //zombiebeatdown loss message var() localized string GameEndedMessage4; //gibcollect win message event InitGame( string Options, out string Error ) { local string InOpt; if ( Lives == 0 ) Lives = 5; //set time limit to 10 if zombiebeatdown is on and the timelimit is 0 if ( (bzombiebeatdown) &&TimeLimit == 0 ){ TimeLimit = 10; } //set the timelimit to 0 if zombiebeatdown isnt on if (!bzombiebeatdown){ TimeLimit = 0; } // Set the MaxUndead according to the AmountofUndead Super.InitGame(Options, Error); if (bzombiebeatdown){ bteamgame = true; bForceRespawn = true; } else{ bteamgame = false; } bnomonsters = false; beveryonezombie = false; } function InitGameReplicationInfo() { Super.InitGameReplicationInfo(); CorpseGameReplicationInfo(GameReplicationInfo).bGibCollect = bGibCollect; CorpseGameReplicationInfo(GameReplicationInfo).MaxUndead = MaxUndead; } function Timer() { local Pawn P; local Carcass C; local NavigationPoint N; local CorpseGameReplicationInfo CGRI; /* for (M = BaseMutator; M != None; M = M.NextMutator) { if (M.IsA('UndeadPack')) bUndeadPack = True; } */ CGRI = corpsegameReplicationInfo(Level.Game.GameReplicationInfo); // CorpseGameReplicationInfo(GameReplicationInfo) if (!bUndeadPack){ foreach AllActors(class'NavigationPoint', N) { //------------------------------------------ // spawn Undead depending on amountofundead if (bZombieBeatDown && (CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount < MaxUndead)) { if ((AmountofUndead) == 1){ // spawns some undead if (N.IsA('PathNode') &&frand() <0.002){ Spawn(class'corpsemania.zombie',,,N.Location - Vect(0,0,6)); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() <0.0006){ Spawn(class'corpsemania.ghost',,,N.Location); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() < 0.0001){ Spawn(class'corpsemania.zombiemaster',,,N.Location); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() < 0.00006){ Spawn(class'corpsemania.kamizombie',,,N.Location); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() < 0.00005){ Spawn(class'corpsemania.ghoul',,,N.Location); CGRI.UndeadAmount+=1; } } if ((AmountofUndead) == 2){ // spawns normal amount of undead if (N.IsA('PathNode') &&frand() <0.01){ Spawn(class'corpsemania.zombie',,,N.Location - Vect(0,0,6)); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() <0.0015){ Spawn(class'corpsemania.ghost',,,N.Location); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() < 0.0008){ Spawn(class'corpsemania.zombiemaster',,,N.Location); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() < 0.0004){ Spawn(class'corpsemania.kamizombie',,,N.Location); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() < 0.0003){ Spawn(class'corpsemania.ghoul',,,N.Location); CGRI.UndeadAmount+=1; } } if ((AmountofUndead) == 3){ // spawns a shitload of undead if (N.IsA('PathNode') &&frand() <0.08){ Spawn(class'corpsemania.zombie',,,N.Location - Vect(0,0,6)); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() <0.02){ Spawn(class'corpsemania.ghost',,,N.Location); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() < 0.01){ Spawn(class'corpsemania.zombiemaster',,,N.Location); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() < 0.006){ Spawn(class'corpsemania.kamizombie',,,N.Location); CGRI.UndeadAmount+=1; } else if (N.IsA('PathNode') &&frand() < 0.005){ Spawn(class'corpsemania.ghoul',,,N.Location); CGRI.UndeadAmount+=1; } } } } // do random stuff if exessivemode is on if (exessivemode){ if (N.IsA('PathNode') &&frand() <0.02) Spawn(class'corpsemania.BigGib',,,N.Location - Vect(0,0,6)); else if (N.IsA('PathNode') &&frand() <0.025){ Spawn(class'corpsemania.kamizombie',,,N.Location - Vect(0,0,6)); CGRI.UndeadAmount+=1; } } } foreach AllActors(class'carcass', C) { // spawn random stuff when exessive mode is on if ( (exessivemode) && C.IsA('uthumancarcass') ) { // spawns a zombie from carcass randomly if ((aizombies)&& (CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount < MaxUndead)&& frand() <0.1){ Spawn(class'corpsemania.zombie',,,C.Location); CGRI.UndeadAmount+=1; } else if (frand() < 0.02) Spawn(class'Botpack.shockwave',,,C.Location); } if ( (exessivemode) && C.IsA('BigGib') ) { // spawns a ghost from gibbed carcass randomly if (frand() < 0.04) Spawn(class'corpsemania.ghost',,,C.Location); C.Destroy(); } //spawns a zombie if ai zombies is on if ( (aizombies)&& (CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount < MaxUndead) && (!exessivemode) &&C.IsA('uthumancarcass')) { Spawn(class'corpsemania.zombie',,,C.Location); CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount++; C.destroy(); } } foreach AllActors(class'Pawn', P) { if ((bzombiebeatdown) && timelimit == 0){ if (P.IsA('Zombie') || P.IsA('ZombieMaster') || P.isa('Ghost')) Spawn(class'Botpack.shockwave',,,P.Location); } // makes the player zombie's life go up if its < 80 if ((P.fatness < 99) && (P.health < 80)){ P.Health++; } // makes the player zombie's life go down if its > 80 if ((P.fatness < 99) && (P.health > 80)){ P.Health--; } if ((P.fatness < 99) && (P.health > 0) && (P.LightBrightness < 150)){ P.Lightbrightness++; } } super.Timer(); For ( P=Level.PawnList; P!=None; P=P.NextPawn ) if ( P.IsInState('FeigningDeath') ) P.GibbedBy(P); } // end of Timer function PreBeginPlay() { FragLimit = 0; /// no fraglimit super.PreBeginPlay(); } function bool NeedPlayers() { if ( bGameEnded || (TotalKills > 0.15 * (NumPlayers + NumBots) * Lives) ) return false; return (NumPlayers + NumBots < MinPlayers); } function float GameThreatAdd(Bot aBot, Pawn Other) { if ( !Other.bIsPlayer ) return 0; else return 0.1 * Other.PlayerReplicationInfo.Score; } event playerpawn Login ( string Portal, string Options, out string Error, class SpawnClass ) { local playerpawn NewPlayer; local Pawn P; /* // if more than 15% of the game is over, must join as spectator if ( TotalKills > 0.15 * (NumPlayers + NumBots) * Lives ) { SpawnClass = class'CHSpectator'; if ( (NumSpectators >= MaxSpectators) && ((Level.NetMode != NM_ListenServer) || (NumPlayers > 0)) ) { MaxSpectators++; } } */ NewPlayer = Super.Login(Portal, Options, Error, SpawnClass); if ( (NewPlayer != None) && !NewPlayer.IsA('Spectator') && !NewPlayer.IsA('Commander') ){ PlayerTeamNum = NewPlayer.PlayerReplicationInfo.Team; if (!bgibcollect) NewPlayer.PlayerReplicationInfo.Score = Lives; if (bgibcollect){ NewPlayer.fatness = 80; NewPlayer.health = 80; newplayer.LightBrightness = 150; newplayer.LightRadius = 5; newplayer.LightHue = 80; newplayer.LightType = LT_Steady; } } return NewPlayer; } event PostLogin( playerpawn NewPlayer ) { if( NewPlayer.Player != None && Viewport(NewPlayer.Player) != None) LocalPlayer = NewPlayer; if ( (TotalKills > 0.15 * (NumPlayers + NumBots) * Lives) && NewPlayer.IsA('CHSpectator') ) GameName = AltStartupMessage; if ( Level.NetMode != NM_Standalone ) NewPlayer.ClientChangeTeam(NewPlayer.PlayerReplicationInfo.Team); Super.PostLogin(NewPlayer); GameName = Default.GameName; } function bool ChangeTeam(Pawn Other, int NewTeam) { local int i, s, DesiredTeam; local pawn APlayer, P; local teaminfo SmallestTeam; //------------------------------------ //change teams if zombiebeatdown is on if ( bRatedGame && (Other.PlayerReplicationInfo.Team != 255) ) return false; for( i=0; i<4; i++ ) if ( (SmallestTeam == None) || (SmallestTeam.Size > Teams[i].Size) ) { s = i; SmallestTeam = Teams[i]; } if ( (NewTeam == 255) || (NewTeam >= 4) ) NewTeam = s; if ( Other.IsA('Spectator') ) { Other.PlayerReplicationInfo.Team = 255; if (LocalLog != None) LocalLog.LogTeamChange(Other); if (WorldLog != None) WorldLog.LogTeamChange(Other); return true; } if ( Other.IsA('Commander') ) { Other.PlayerReplicationInfo.Team = NewTeam; if (LocalLog != None) LocalLog.LogTeamChange(Other); if (WorldLog != None) WorldLog.LogTeamChange(Other); return true; } if ( Other.IsA('TournamentPlayer') ) TournamentPlayer(Other).StartSpot = None; if ( Other.PlayerReplicationInfo.Team != 255 ) { ClearOrders(Other); Teams[Other.PlayerReplicationInfo.Team].Size--; } if ( Teams[NewTeam].Size < 4 ) { AddToTeam(NewTeam, Other); return true; } if ( (Other.PlayerReplicationInfo.Team == 255) || ((SmallestTeam != None) && (SmallestTeam.Size < 4)) ) { if ( s == 255 ) s = 0; AddToTeam(s, Other); return true; } return false; } function AddToTeam( int num, Pawn Other ) { local teaminfo aTeam; local Pawn P; local bool bSuccess; local string SkinName, FaceName; //-------------------------------------------- //add players to team if zombiebeatdown is on if ( Other == None ) { log("Added none to team!!!"); return; } aTeam = Teams[num]; aTeam.Size++; Other.PlayerReplicationInfo.Team = num; Other.PlayerReplicationInfo.TeamName = aTeam.TeamName; if (LocalLog != None) LocalLog.LogTeamChange(Other); if (WorldLog != None) WorldLog.LogTeamChange(Other); bSuccess = false; if ( Other.IsA('PlayerPawn') ) { Other.PlayerReplicationInfo.TeamID = 0; PlayerPawn(Other).ClientChangeTeam(Other.PlayerReplicationInfo.Team); } else Other.PlayerReplicationInfo.TeamID = 1; while ( !bSuccess ) { bSuccess = true; for ( P=Level.PawnList; P!=None; P=P.nextPawn ) if ( P.bIsPlayer && (P != Other) && (P.PlayerReplicationInfo.Team == Other.PlayerReplicationInfo.Team) && (P.PlayerReplicationInfo.TeamId == Other.PlayerReplicationInfo.TeamId) ) bSuccess = false; if ( !bSuccess ) Other.PlayerReplicationInfo.TeamID++; } BroadcastLocalizedMessage( DMMessageClass, 3, Other.PlayerReplicationInfo, None, aTeam ); Other.static.GetMultiSkin(Other, SkinName, FaceName); Other.static.SetMultiSkin(Other, SkinName, FaceName, num); } function TeamInfo GetTeam(int TeamNum ) { if ( TeamNum < ArrayCount(Teams) ) return Teams[TeamNum]; else return None; } function bool IsOnTeam(Pawn Other, int TeamNum) { if ( Other.PlayerReplicationInfo.Team == TeamNum ) return true; return false; } function bool AddBot() { local bot NewBot; local NavigationPoint StartSpot, OldStartSpot; local int DesiredTeam, i, MinSize; NewBot = SpawnBot(StartSpot); if ( NewBot == None ) { log("Failed to spawn bot"); return false; } //-------------------------------------------- //spawn bot on a team if zombiebeatdown is on DesiredTeam = NewBot.PlayerReplicationInfo.Team; NewBot.PlayerReplicationInfo.Team = 255; if ( (DesiredTeam == 255) || !ChangeTeam(NewBot, DesiredTeam) ) { ChangeTeam(NewBot, NextBotTeam); NextBotTeam++; if ( NextBotTeam >= 4 ) NextBotTeam = 0; } StartSpot.PlayTeleportEffect(NewBot, true); // SetBotOrders(NewBot); // Log it. if (LocalLog != None) { LocalLog.LogPlayerConnect(NewBot); LocalLog.FlushLog(); } if (WorldLog != None) { WorldLog.LogPlayerConnect(NewBot); WorldLog.FlushLog(); } return true; } function bool IsRelevant(actor Other) { local Mutator M; for (M = BaseMutator; M != None; M = M.NextMutator) { if (M.IsA('UndeadPack')) bUndeadPack = true; } if( (Pawn(Other) != None) && !Pawn(Other).bIsPlayer ) return true; // dims all of the lights in darkmode if (DarkMode) { if (Other.IsA('Light')) Other.Lightbrightness = 15; } //change skins in exessive mode if (exessivemode) { if (Other.IsA('Decoration')) Other.Skin = Texture'UnrealShare.Skins.JBody11'; if (Other.IsA('Pickup')) Other.Skin = Texture'UnrealShare.Skins.JBody11'; } //players only have a chainsaw in chainsawmode if ( bNoWeapons ) { if ( Other.IsA('Weapon') && !Other.IsA('chainsaw')) { return false; } if ( Other.IsA('Ammo')) { return false; } } return Super.IsRelevant(Other); } //-------------------------------------------- // ZOMBIFY THEM ALL!!!!!!! MUHAHAHAHAHAHA!!!!! function bool RestartPlayer( pawn aPlayer ) { local NavigationPoint startSpot; local bool foundStart; local Pawn P; if( bRestartLevel && Level.NetMode!=NM_DedicatedServer && Level.NetMode!=NM_ListenServer ) return true; //-----------------\\ //--ZombieBeatDown--\\ if (bzombiebeatdown){ if ( aPlayer.PlayerReplicationInfo.Score < 1 ) { BroadcastLocalizedMessage(class'CMOutMessage', 0, aPlayer.PlayerReplicationInfo); For ( P=Level.PawnList; P!=None; P=P.NextPawn ) if ( P.bIsPlayer && (P.PlayerReplicationInfo.Score >= 1) ) P.PlayerReplicationInfo.Score += 0.00001; if ( aPlayer.IsA('Bot') ) { aPlayer.PlayerReplicationInfo.bIsSpectator = true; aPlayer.PlayerReplicationInfo.bWaitingPlayer = true; aPlayer.GotoState('GameEnded'); return false; // bots don't respawn when ghosts } } startSpot = FindPlayerStart(None, 255); if( startSpot == None ) return false; foundStart = aPlayer.SetLocation(startSpot.Location); if( foundStart ) { startSpot.PlayTeleportEffect(aPlayer, true); aPlayer.SetRotation(startSpot.Rotation); aPlayer.ViewRotation = aPlayer.Rotation; aPlayer.Acceleration = vect(0,0,0); aPlayer.Velocity = vect(0,0,0); aPlayer.Health = aPlayer.Default.Health; aPlayer.ClientSetRotation( startSpot.Rotation ); aPlayer.bHidden = false; aPlayer.SoundDampening = aPlayer.Default.SoundDampening; if ( aPlayer.PlayerReplicationInfo.Score < 1 ) { aPlayer.bHidden = true; aPlayer.PlayerRestartState = 'PlayerSpectating'; CheckEndGame(); } else { aPlayer.SetCollision( true, true, true ); AddDefaultInventory(aPlayer); } } return foundStart; } //-------------\\ //--GibCollect--\\ else if (bgibcollect){ startSpot = FindPlayerStart(None, 255); if( startSpot == None ) return false; foundStart = aPlayer.SetLocation(startSpot.Location); if( foundStart ) { startSpot.PlayTeleportEffect(aPlayer, true); aPlayer.SetRotation(startSpot.Rotation); aPlayer.ViewRotation = aPlayer.Rotation; aPlayer.Acceleration = vect(0,0,0); aPlayer.Velocity = vect(0,0,0); aPlayer.ClientSetRotation( startSpot.Rotation ); aPlayer.bHidden = false; aPlayer.SoundDampening = aPlayer.Default.SoundDampening; aplayer.fatness = 80; aplayer.health = 80; aplayer.LightBrightness = 150; aplayer.LightRadius = 5; aplayer.LightHue = 80; aplayer.LightType = LT_Steady; aPlayer.SetCollision( true, true, true ); AddDefaultInventory(aPlayer); } return foundStart; } //-------------\\ //--DeathMatch--\\ else{ if ( aPlayer.PlayerReplicationInfo.Score < 1 ) { BroadcastLocalizedMessage(class'CMOutMessage', 0, aPlayer.PlayerReplicationInfo); For ( P=Level.PawnList; P!=None; P=P.NextPawn ) if ( P.bIsPlayer && (P.PlayerReplicationInfo.Score >= 1) ) P.PlayerReplicationInfo.Score += 0.00001; // zombify bot if ( aPlayer.IsA('Bot') ) { aplayer.fatness = 80; GiveWeapon(aplayer, "CorpseMania.GibThrower"); aplayer.health = 80; aplayer.groundspeed = 150; aplayer.jumpz = 150; aplayer.waterspeed = 150; aplayer.LightBrightness = 150; aplayer.LightRadius = 5; aplayer.LightHue = 80; aplayer.LightType = LT_Steady; aplayer.Die = Sound'UnrealShare.Gibs.Gib1'; aplayer.HitSound1 = Sound'Botpack.Male.NewGib'; aplayer.HitSound2 = Sound'UnrealShare.Gibs.Gib4'; aPlayer.SetCollision( true, true, true ); // return false; // bots don't respawn when ghosts } } startSpot = FindPlayerStart(None, 255); if( startSpot == None ) return false; foundStart = aPlayer.SetLocation(startSpot.Location); if( foundStart ) { startSpot.PlayTeleportEffect(aPlayer, true); aPlayer.SetRotation(startSpot.Rotation); aPlayer.ViewRotation = aPlayer.Rotation; aPlayer.Acceleration = vect(0,0,0); aPlayer.Velocity = vect(0,0,0); aPlayer.Health = aPlayer.Default.Health; aPlayer.ClientSetRotation( startSpot.Rotation ); aPlayer.bHidden = false; aPlayer.SoundDampening = aPlayer.Default.SoundDampening; // zombify player if ( aPlayer.PlayerReplicationInfo.Score < 1 ) { aplayer.fatness = 80; GiveWeapon(aplayer, "CorpseMania.GibThrower"); aplayer.health = 80; aplayer.groundspeed = 150; aplayer.jumpz = 150; aplayer.waterspeed = 150; aplayer.LightBrightness = 150; aplayer.LightRadius = 5; aplayer.LightHue = 80; aplayer.LightType = LT_Steady; aplayer.Die = Sound'UnrealShare.Gibs.Gib1'; aplayer.HitSound1 = Sound'Botpack.Male.NewGib'; aplayer.HitSound2 = Sound'UnrealShare.Gibs.Gib4'; aPlayer.SetCollision( true, true, true ); CheckEndGame(); } else { aPlayer.SetCollision( true, true, true ); AddDefaultInventory(aPlayer); } } return foundStart; } } function Logout( pawn Exiting ) { Super.Logout(Exiting); // Don't run endgame if it's the local player leaving // - stats saveconfig messes up saved defaults if( LocalPlayer == None || Exiting != LocalPlayer ) CheckEndGame(); Teams[Exiting.PlayerReplicationInfo.Team].Size--; ClearOrders(Exiting); } function ClearOrders(Pawn Leaving) { local Pawn P; for ( P=Level.PawnList; P!=None; P=P.NextPawn ) if ( P.IsA('Bot') && (Bot(P).OrderObject == Leaving) ) Bot(P).SetOrders('Freelance', None); } // Find a team given its name function byte FindTeamByName( string TeamName ) { local byte i; // if (bzombiebeatdown){ for ( i=0; i<4; i++ ) if ( Teams[i].TeamName == TeamName ) return i; return 255; // No Team // } } function CheckEndGame() { local Pawn PawnLink; local ScriptedPawn S; local int StillPlaying; local bool bStillHuman; local bot B, D; if ( bGameEnded ) return; // Check to see if everyone is a zombie. NumZombies = 0; for ( PawnLink=Level.PawnList; PawnLink!=None; PawnLink=PawnLink.nextPawn ) if ( PawnLink.bIsPlayer ) { if ( PawnLink.PlayerReplicationInfo.Score < 1 ) NumZombies++; else { if ( PawnLink.IsA('PlayerPawn') ) bStillHuman = true; StillPlaying++; } } // End the game if the timelimit is hit. if ( TimeLimit == 0 ){ if (bzombiebeatdown){ BroadcastLocalizedMessage(class'CMWinMessage', 0, PawnLink.PlayerReplicationInfo); bGameEnded = true; } } // End the game if everyone is a zombie. else if ((bzombiebeatdown) && StillPlaying < 1 ){ GameReplicationInfo.GameEndedComments = GameEndedMessage3; BroadcastLocalizedMessage(class'CMLossMessage', 0, PawnLink.PlayerReplicationInfo); beveryonezombie = true; bGameEnded = true; } // End the game in deathmatch if only one player is alive. if ((!bzombiebeatdown) && (!bgibcollect) && StillPlaying < 2 ) EndGame("lastmanstanding"); else if ( !bStillHuman ) { // no humans left - get bots to be more aggressive and finish up for ( PawnLink=Level.PawnList; PawnLink!=None; PawnLink=PawnLink.NextPawn ) { B = Bot(PawnLink); if ( B != None ) { B.CampingRate = 0; B.Aggressiveness += 5.0; if ( D == None ) D = B; else if ( B.Enemy == None ) B.SetEnemy(D); } } } } function bool SetEndCams(string Reason) { local pawn P, Best; local PlayerPawn Player; //-----------------\\ //--zombiebeatdown--\\ // check if everyone's a zombie if (beveryonezombie == true) { GameReplicationInfo.GameEndedComments = GameEndedMessage3; P.GotoState('GameEnded'); } if (bzombiebeatdown){ EndTime = Level.TimeSeconds + 3.0; GameReplicationInfo.GameEndedComments = GameEndedMessage; log( "Game ended at "$EndTime); for ( P=Level.PawnList; P!=None; P=P.nextPawn ) { Player = PlayerPawn(P); if ( Player != None ) { if (!bTutorialGame) PlayWinMessage(Player, (Player == P)); Player.bBehindView = true; Player.ViewTarget = None; Player.ClientGameEnded(); } P.GotoState('GameEnded'); } CalcEndStats(); return true; } //-------------\\ //--GibCollect--\\ else if (bgibcollect){ // find individual winner for ( P=Level.PawnList; P!=None; P=P.nextPawn ) if ( P.bIsPlayer && ((Best == None) || (P.PlayerReplicationInfo.Score > Best.PlayerReplicationInfo.Score)) ) Best = P; // check for tie for ( P=Level.PawnList; P!=None; P=P.nextPawn ) if ( P.bIsPlayer && (Best != P) && (P.PlayerReplicationInfo.Score == Best.PlayerReplicationInfo.Score) ) { BroadcastLocalizedMessage( DMMessageClass, 0 ); return false; } EndTime = Level.TimeSeconds + 3.0; GameReplicationInfo.GameEndedComments = Best.PlayerReplicationInfo.PlayerName@GameEndedMessage4; log( "Game ended at "$EndTime); for ( P=Level.PawnList; P!=None; P=P.nextPawn ) { Player = PlayerPawn(P); if ( Player != None ) { if (!bTutorialGame) PlayWinMessage(Player, (Player == Best)); Player.bBehindView = true; if ( Player == Best ) Player.ViewTarget = None; else Player.ViewTarget = Best; Player.ClientGameEnded(); } P.GotoState('GameEnded'); } CalcEndStats(); return true; } //-------------\\ //--deathmatch--\\ else{ // find individual winner for ( P=Level.PawnList; P!=None; P=P.nextPawn ) if ( P.bIsPlayer && ((Best == None) || (P.PlayerReplicationInfo.Score > Best.PlayerReplicationInfo.Score)) ) Best = P; // check for tie for ( P=Level.PawnList; P!=None; P=P.nextPawn ) if ( P.bIsPlayer && (Best != P) && (P.PlayerReplicationInfo.Score == Best.PlayerReplicationInfo.Score) ) { BroadcastLocalizedMessage( DMMessageClass, 0 ); return false; } EndTime = Level.TimeSeconds + 3.0; GameReplicationInfo.GameEndedComments = Best.PlayerReplicationInfo.PlayerName@GameEndedMessage2; log( "Game ended at "$EndTime); for ( P=Level.PawnList; P!=None; P=P.nextPawn ) { Player = PlayerPawn(P); if ( Player != None ) { if (!bTutorialGame) PlayWinMessage(Player, (Player == Best)); Player.bBehindView = true; if ( Player == Best ) Player.ViewTarget = None; else Player.ViewTarget = Best; Player.ClientGameEnded(); } P.GotoState('GameEnded'); } CalcEndStats(); return true; } } //-------------------------------------------------- //Use reduce damage for teamplay modifications, etc. function int ReduceDamage(int Damage, name DamageType, pawn injured, pawn instigatedBy) { Damage = Super.ReduceDamage(Damage, DamageType, injured, instigatedBy); if ( instigatedBy == None ) return Damage; // players can't hurt eachother if ( (bzombiebeatdown) &&(instigatedBy != injured) && injured.bIsPlayer && instigatedBy.bIsPlayer && injured.fatness > 115 && instigatedBy.fatness > 115 ) { if ( injured.IsA('Bot') ) Bot(Injured).YellAt(instigatedBy); return (Damage * 0); } // zombies can't hurt eachother if ( (bzombiebeatdown) &&(instigatedBy != injured) && injured.bIsPlayer && instigatedBy.bIsPlayer && injured.fatness < 115 && instigatedBy.fatness < 115 ) { if ( injured.IsA('Bot') ) Bot(Injured).YellAt(instigatedBy); return (Damage * 0); } else return Damage; } function Killed( pawn killer, pawn Other, name damageType ) { local int OldFragLimit; OldFragLimit = FragLimit; FragLimit = 0; if ( Other.bIsPlayer ) TotalKills++; if ((bzombiebeatdown) && Other.bIsPlayer && Other.PlayerReplicationInfo.Score > 0) Other.PlayerReplicationInfo.Score -= 1; if (bzombiebeatdown) { if (Other.IsA('Zombie')) CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount-=1; if (Other.IsA('KamiZombie')) CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount-=1; if (Other.IsA('ZombieMaster')) CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount-=1; if (Other.IsA('Ghost')) CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount-=1; if (Other.IsA('Ghoul')) CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount-=1; } // End the game in gibcollect if the frag limit is reached. if ((bgibcollect) && (Killer.bIsPlayer) && (Killer.PlayerReplicationInfo.Score >= Lives) ) EndGame("gibcollect"); Super.Killed(Killer, Other, damageType); FragLimit = OldFragLimit; CheckEndGame(); } function ScoreKill(pawn Killer, pawn Other) { local BigGib carc; //------------------- //spawns the new gibs if (Killer.Health > 0) { carc = Spawn(class 'BigGib',,, Other.Location + CollisionHeight * vect(0,0,0.8) ); if (carc != None) { if ((AmountofGibs) == 1){ carc.Initfor(self); } else if ((AmountofGibs) == 2){ carc.Initfor(self); carc.Initfor(self); } else if ((AmountofGibs) == 3){ carc.Initfor(self); carc.Initfor(self); carc.Initfor(self); } else if ((AmountofGibs) == 4){ carc.Initfor(self); carc.Initfor(self); carc.Initfor(self); carc.Initfor(self); } else if ((AmountofGibs) == 5){ carc.Initfor(self); carc.Initfor(self); carc.Initfor(self); carc.Initfor(self); carc.Initfor(self); carc.Initfor(self); carc.Initfor(self); } carc.Velocity = Velocity + VSize(Velocity) * VRand(); carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z); } } if (Other.bIsPlayer) Other.DieCount++; if ((!bgibcollect)&& (Other.bIsPlayer)&& Other.PlayerReplicationInfo.Score > 0) Other.PlayerReplicationInfo.Score -= 1; if ((bzombiebeatdown) && Killer.bIsPlayer) Killer.PlayerReplicationInfo.Deaths += 1; if( (killer != Other) && (killer != None) ) if (Killer.bIsPlayer) killer.killCount++; // if undead die without a killer take one off the undeadamount if ( (Other != None) && ((Killer == None) || (Killer == Other)) ){ if (bzombiebeatdown) { if (Other.IsA('Zombie')) CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount-=1; if (Other.IsA('KamiZombie')) CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount-=1; if (Other.IsA('ZombieMaster')) CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount-=1; if (Other.IsA('Ghost')) CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount-=1; if (Other.IsA('Ghoul')) CorpseGameReplicationInfo(GameReplicationInfo).UndeadAmount-=1; } } BaseMutator.ScoreKill(Killer, Other); } function bool PickupQuery( Pawn Other, Inventory item ) { if ( (!bGibCollect) && Other.PlayerReplicationInfo.Score < 1 ) return false; return Super.PickupQuery( Other, item ); } function ModifyBehaviour(Bot NewBot) { // Set the Bot's Lives if (!bgibcollect) NewBot.PlayerReplicationInfo.Score = Lives; NewBot.CampingRate += FRand(); } /* AssessBotAttitude returns a value that translates to an attitude 0 = ATTITUDE_Fear; 1 = return ATTITUDE_Hate; 2 = return ATTITUDE_Ignore; 3 = return ATTITUDE_Friendly; */ function byte AssessBotAttitude(Bot aBot, Pawn Other) { local float Adjust; if ( aBot.bNovice ) Adjust = -0.2; else Adjust = -0.2 - 0.1 * aBot.Skill; if (bzombiebeatdown){ if ( Other.bIsPlayer && (Other.PlayerReplicationInfo.Score < 1) ) return 2; //bots ignore spectators else if (Other.bIsPlayer && (Other.fatness < 115) &&(aBot.fatness < 115) ) return 3; //bots ignore other zombies else if (Other.bIsPlayer && (Other.fatness > 115) &&(aBot.fatness > 115) ) return 3; //bots ignore players else if (Other.IsA('Zombie')) return 1; //bots hate zombies else if (Other.IsA('Ghoul')) return 1; //bots hate ghouls else if ( aBot.bKamikaze ) return 1; else if ( Other.IsA('TeamCannon') || (aBot.RelativeStrength(Other) > aBot.Aggressiveness - Adjust) ) return 0; else return 1; } else if (bgibcollect){ if ( Other.bIsPlayer && (Other.PlayerReplicationInfo.Score < 1) ) return 1; //bots hate spectators else if (Other.bIsPlayer && (Other.fatness < 115) &&(aBot.fatness < 115) ) return 1; //bots hate other zombies else if (Other.bIsPlayer && (Other.fatness > 115) &&(aBot.fatness > 115) ) return 1; //bots hate players else if ( aBot.bKamikaze ) return 1; else if ( Other.IsA('TeamCannon') || (aBot.RelativeStrength(Other) > aBot.Aggressiveness - Adjust) ) return 0; else return 1; } else{ if ( Other.bIsPlayer && (Other.PlayerReplicationInfo.Score < 1) ) return 2; //bots ignore spectators else if ( Other.bIsPlayer && (Other.fatness < 115) &&(aBot.fatness < 115) ) return 3; //bots ignore other zombies else if ( aBot.bKamikaze ) return 1; else if ( Other.IsA('TeamCannon') || (aBot.RelativeStrength(Other) > aBot.Aggressiveness - Adjust) ) return 0; else return 1; } } function PlayStartUpMessage(PlayerPawn NewPlayer) { local int i; NewPlayer.ClearProgressMessages(); // Game Name NewPlayer.SetProgressMessage(GameName, i++); if (bzombiebeatdown) NewPlayer.SetProgressMessage("Survive for "$TimeLimit$" minutes",i++); else if (bgibcollect) NewPlayer.SetProgressMessage("Collect "$Lives$" gibs",i++); else NewPlayer.SetProgressMessage("Be the last to not join the Zombies!",i++); if ( Level.NetMode == NM_Standalone ) NewPlayer.SetProgressMessage(SingleWaitingMessage, i++); else if ( bRequireReady ) NewPlayer.SetProgressMessage(TourneyMessage, i++); } function bool OneOnOne() { return ( NumPlayers + NumBots - NumZombies == 2 ); } } sY:/-`:- 2v//============================================================================= // GibThrower. //============================================================================= class GibThrower expands ut_biorifle; function Fire( float Value ) { if ( (AmmoType == None) && (AmmoName != None) ) { // ammocheck GiveAmmo(Pawn(Owner)); } if ( pawn(owner).health < 1) return; if ( AmmoType.UseAmmo(0) ) { //take out life instead of ammo pawn(owner).health -= 1; GotoState('NormalFire'); bPointing=True; bCanClientFire = true; ClientFire(Value); if ( bRapidFire || (FiringSpeed > 0) ) Pawn(Owner).PlayRecoil(FiringSpeed); if ( bInstantHit ) TraceFire(0.0); else ProjectileFire(ProjectileClass, ProjectileSpeed, bWarnTarget); } } function AltFire( float Value ) { bPointing=True; if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if ( AmmoType.UseAmmo(0) ) { pawn(owner).health -= 1; GoToState('AltFiring'); bCanClientFire = true; ClientAltFire(Value); } } state AltFiring { ignores AnimEnd; function Tick( float DeltaTime ) { local Pawn PawnOwner; PawnOwner = Pawn(Owner); if ( pawnowner.health < 1) return; //SetLocation(Owner.Location); if ( ChargeSize < 4.1 ) { Count += DeltaTime; if ( (Count > 0.5) && AmmoType.UseAmmo(0) ) { //take out life instead of ammo pawnowner.health -= 2; ChargeSize += Count; Count = 0; if ( (PlayerPawn(Owner) == None) && (FRand() < 0.2) ) GoToState('ShootLoad'); } } if( (pawn(Owner).bAltFire==0) ) GoToState('ShootLoad'); } function BeginState() { ChargeSize = 0.0; Count = 0.0; } function EndState() { ChargeSize = FMin(ChargeSize, 4.1); } Begin: FinishAnim(); } @ XP@//============================================================================= // KamiZombie. //============================================================================= class KamiZombie expands Zombie; var bool bBerserk; var() name MyDamageType; function GoBerserk() { if ( (bBerserk || ((Health < 0.75 * Default.Health) && (FRand() < 0.65))) && (VSize(Location - Enemy.Location) < 500) ) bBerserk = true; else bBerserk = false; if ( bBerserk ) { AccelRate = 4 * AccelRate; GroundSpeed = 2.5 * Default.GroundSpeed; } } function PlayMeleeAttack() { local float decision; local vector X,Y,Z, projStart; GetAxes(Rotation,X,Y,Z); FireProjectile( vect(1, 0, 0.8), 900); projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; decision = FRand(); Acceleration = AccelRate * Normal(Target.Location - Location); //log("Start Melee Attack"); if ( Region.Zone.bWaterZone ) { if (AnimSequence == 'LeftHit') decision += 0.17; else if (AnimSequence == 'HeadHit') decision -= 0.17; if (decision < 0.5) PlayAnim('LeftHit'); else PlayAnim('HeadHit'); } else { if (AnimSequence == 'HeadHit') decision += 0.17; else if (AnimSequence == 'RightHit') decision -= 0.17; if (decision < 0.5) { PlayAnim('HeadHit'); spawn(class'UT_SpriteBallExplosion' ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); HurtRadius(50, 150, MyDamageType, 50, projstart); TakeDamage(100, self, location, vect(0,0,0), 'Exploded'); } else { PlayAnim('RightHit'); spawn(class'UT_SpriteBallExplosion' ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); HurtRadius(50, 150, MyDamageType, 50, projstart); TakeDamage(100, self, location, vect(0,0,0), 'Exploded'); } } } function ShootTarget() { local vector X,Y,Z, projStart; local UT_SpriteBallExplosion s; GetAxes(Rotation,X,Y,Z); FireProjectile( vect(1, 0, 0.8), 900); projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; s = spawn(class'UT_SpriteBallExplosion' ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); s.RemoteRole = ROLE_None; HurtRadius(50, 150, MyDamageType, 50, projstart); TakeDamage(100, self, location, vect(0,0,0), 'Exploded'); } function PlayRangedAttack() { local vector X,Y,Z, projStart; local UT_SpriteBallExplosion s; GetAxes(Rotation,X,Y,Z); if (Region.Zone.bWaterZone) PlayAnim('Victory1L'); else PlayAnim('Victory1'); projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; s = spawn(class'UT_SpriteBallExplosion' ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); s.RemoteRole = ROLE_None; HurtRadius(50, 150, MyDamageType, 50, projstart); TakeDamage(100, self, location, vect(0,0,0), 'Exploded'); } function PlayDying(name DamageType, vector HitLoc) { local vector X,Y,Z, projStart; local UT_SpriteBallExplosion s; GetAxes(Rotation,X,Y,Z); s = spawn(class'UT_SpriteBallExplosion' ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); s.RemoteRole = ROLE_None; HurtRadius(50, 150, MyDamageType, 50, projstart); TakeDamage(100, self, location, vect(0,0,0), 'Exploded'); //first check for head hit if ( ((DamageType == 'Decapitated') || (HitLoc.Z - Location.Z > 0.5 * CollisionHeight)) && !Level.Game.bVeryLowGore ) { PlayHeadDeath(DamageType); return; } Super.PlayDying(DamageType, HitLoc); } state MeleeAttack { ignores SeePlayer, HearNoise, Bump; function PlayMeleeAttack() { if ( Region.Zone.bWaterZone && !bFirstAttack && (FRand() > 0.4 + 0.17 * skill) ) { PlayAnim('walk'); } else Global.PlayMeleeAttack(); bFirstAttack = false; } function BeginState() { Super.BeginState(); bFirstAttack = True; GoBerserk(); } function EndState() { Super.EndState(); bCanStrafe = false; } } m  m Pw*a xw %`-x$?@?? ff&?  ?-x'h-x(-x@ @ NO k K w ~[K6- ->>{.>a!Q8 ->( vi !}v->'w oj To-( WR ^//============================================================================= // Ghoul. //============================================================================= class Ghoul expands ScriptedPawn; #exec MESH IMPORT MESH=Titan1 ANIVFILE=MODELS\titan_a.3D DATAFILE=MODELS\titand.3D X=0 Y=0 Z=0 ZEROTEX=1 #exec MESH ORIGIN MESH=Titan1 X=20 Y=-130 Z=-65 YAW=64 ROLL=-64 #exec MESH SEQUENCE MESH=titan1 SEQ=All STARTFRAME=0 NUMFRAMES=300 #exec MESH SEQUENCE MESH=titan1 SEQ=TBrea001 STARTFRAME=0 NUMFRAMES=6 RATE=6 #exec MESH SEQUENCE MESH=titan1 SEQ=TChest STARTFRAME=6 NUMFRAMES=28 RATE=15 Group=Attack #exec MESH SEQUENCE MESH=titan1 SEQ=TDeat001 STARTFRAME=34 NUMFRAMES=29 RATE=15 #exec MESH SEQUENCE MESH=titan1 SEQ=TDeat002 STARTFRAME=63 NUMFRAMES=18 RATE=15 #exec MESH SEQUENCE MESH=titan1 SEQ=TDeat003 STARTFRAME=81 NUMFRAMES=18 RATE=15 #exec MESH SEQUENCE MESH=titan1 SEQ=TFigh001 STARTFRAME=99 NUMFRAMES=8 RATE=6 #exec MESH SEQUENCE MESH=titan1 SEQ=TFist STARTFRAME=107 NUMFRAMES=28 RATE=15 #exec MESH SEQUENCE MESH=titan1 SEQ=TGetUp STARTFRAME=135 NUMFRAMES=35 RATE=15 #exec MESH SEQUENCE MESH=titan1 SEQ=TLeftUp STARTFRAME=170 NUMFRAMES=1 #exec MESH SEQUENCE MESH=titan1 SEQ=TPunc001 STARTFRAME=171 NUMFRAMES=13 RATE=15 Group=Attack #exec MESH SEQUENCE MESH=titan1 SEQ=TRightUp STARTFRAME=184 NUMFRAMES=1 #exec MESH SEQUENCE MESH=titan1 SEQ=TSit STARTFRAME=185 NUMFRAMES=1 #exec MESH SEQUENCE MESH=titan1 SEQ=TSlap001 STARTFRAME=186 NUMFRAMES=15 RATE=15 Group=Attack #exec MESH SEQUENCE MESH=titan1 SEQ=TSnif001 STARTFRAME=201 NUMFRAMES=18 RATE=15 #exec MESH SEQUENCE MESH=titan1 SEQ=TStom001 STARTFRAME=219 NUMFRAMES=18 RATE=15 Group=Attack #exec MESH SEQUENCE MESH=titan1 SEQ=TThro001 STARTFRAME=237 NUMFRAMES=18 RATE=15 Group=Attack #exec MESH SEQUENCE MESH=titan1 SEQ=TWalk001 STARTFRAME=255 NUMFRAMES=30 RATE=15 #exec MESH SEQUENCE MESH=titan1 SEQ=TShuffle STARTFRAME=285 NUMFRAMES=15 RATE=15 #exec TEXTURE IMPORT NAME=Jtitan1 FILE=MODELS\titan.PCX GROUP=Skins #exec MESHMAP SCALE MESHMAP=titan1 X=0.3 Y=0.3 Z=0.6 #exec MESHMAP SETTEXTURE MESHMAP=titan1 NUM=0 TEXTURE=Jtitan1 #exec MESH NOTIFY MESH=titan1 SEQ=TWalk001 TIME=0.25 FUNCTION=FootStep #exec MESH NOTIFY MESH=titan1 SEQ=TWalk001 TIME=0.75 FUNCTION=FootStep #exec MESH NOTIFY MESH=titan1 SEQ=TWalk001 TIME=0.4 FUNCTION=StartMoving #exec MESH NOTIFY MESH=titan1 SEQ=TWalk001 TIME=0.9 FUNCTION=StartMoving #exec MESH NOTIFY MESH=titan1 SEQ=TStom001 TIME=0.4 FUNCTION=Stomp #exec MESH NOTIFY MESH=titan1 SEQ=TSlap001 TIME=0.46 FUNCTION=SlapDamageTarget #exec MESH NOTIFY MESH=titan1 SEQ=TPunc001 TIME=0.61 FUNCTION=PunchDamageTarget #exec MESH NOTIFY MESH=titan1 SEQ=TThro001 TIME=0.75 FUNCTION=SpawnRock #exec MESH NOTIFY MESH=titan1 SEQ=TDeat001 TIME=0.86 FUNCTION=LandThump #exec MESH NOTIFY MESH=titan1 SEQ=TDeat002 TIME=0.61 FUNCTION=LandThump #exec MESH NOTIFY MESH=titan1 SEQ=TDeat003 TIME=0.69 FUNCTION=LandThump #exec AUDIO IMPORT FILE="Sounds\Titan\throw1a.WAV" NAME="Throw1t" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\step1a.WAV" NAME="step1t" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\stomp4a.WAV" NAME="stomp4t" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\punch1Tt.WAV" NAME="punch1Ti" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\Swing1.WAV" NAME="Swing1t" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\yell1a.WAV" NAME="yell1t" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\yell2a.WAV" NAME="yell2t" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\yell3a.WAV" NAME="yell3t" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\death1a.WAV" NAME="death1t" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\injur1a.WAV" NAME="injur1t" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\injur2a.WAV" NAME="injur2t" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\amb1Ti.WAV" NAME="amb1Ti" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\sniff1Ti.WAV" NAME="sniff1Ti" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\fall1Ti.WAV" NAME="fall1Ti" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\slaphit1Ti.WAV" NAME="slaphit1Ti" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\roam1Ti.WAV" NAME="roam1Ti" GROUP="Titan" #exec AUDIO IMPORT FILE="Sounds\Titan\chestB2Ti.WAV" NAME="chestB2Ti" GROUP="Titan" //FIXME - use fall1ti for titancarcass landed //TITAN variables; var() byte SlapDamage, PunchDamage; var bool bStomp; var bool bLavaTitan; var bool bEndFootStep; var float realSpeed; var() name StompEvent; var() name StepEvent; var(Sounds) sound Step; var(Sounds) sound StompSound; var(Sounds) sound slap; var(Sounds) sound swing; var(Sounds) sound throw; var(Sounds) sound chest; function PlayAcquisitionSound() { if (Acquire != None) { PlaySound(Acquire, SLOT_Talk,, true); PlaySound(Acquire, SLOT_Misc,, true); } } function PlayFearSound() { if (Fear != None) { PlaySound(Fear, SLOT_Talk,, true); PlaySound(Fear, SLOT_Misc,, true); } } function PlayRoamingSound() { if ( (Threaten != None) && (FRand() < 0.3) ) { PlaySound(Threaten, SLOT_Talk,, true); PlaySound(Threaten, SLOT_Misc,, true); return; } if ( FRand() < 0.5 ) { PlaySound(Sound'roam1Ti', SLOT_Talk,, true); PlaySound(Sound'roam1Ti', SLOT_Misc,, true); return; } if (Roam != None) { PlaySound(Roam, SLOT_Talk,, true); PlaySound(Roam, SLOT_Misc,, true); } } function PlayThreateningSound() { if (Threaten == None) return; if (FRand() < 0.5) { PlaySound(Threaten, SLOT_Talk,, true); PlaySound(Threaten, SLOT_Misc,, true); } else { PlaySound(Fear, SLOT_Talk,, true); PlaySound(Fear, SLOT_Misc,, true); } } singular event BaseChange() { local float decorMass; if (Pawn(Base) != None) { Base.TakeDamage( 1000, Self,Location,0.5 * Velocity , 'stomped'); JumpOffPawn(); } else if ( (Decoration(Base) != None) && (Velocity.Z < -400) ) { decorMass = FMax(Decoration(Base).Mass, 1); Base.TakeDamage(1000, Self, Location, 0.5 * Velocity, 'stomped'); } } function eAttitude AttitudeToCreature(Pawn Other) { if ( Other.IsA('Ghoul') ) return ATTITUDE_Friendly; else if ( Other.IsA('Zombie') ) return ATTITUDE_Friendly; else if ( Other.IsA('ScriptedPawn') && Other.fatness < 115 ) return ATTITUDE_Friendly; else if ( Other.IsA('Bot') ) return ATTITUDE_Hate; else if ( Other.bIsPlayer && Other.fatness < 100) return ATTITUDE_Friendly; else return ATTITUDE_Hate; } function ThrowOther(Pawn Other) { local float dist, shake; local PlayerPawn aPlayer; local vector Momentum; if ( Other.mass > 250 ) return; aPlayer = PlayerPawn(Other); if ( aPlayer == None ) { if ( !bStomp || (Other.Physics != PHYS_Walking) ) return; dist = VSize(Location - Other.Location); if (dist > 500) return; } else { dist = VSize(Location - Other.Location); shake = FMax(500, 1500 - dist); if ( dist > 1500 ) return; aPlayer.ShakeView( FMax(0, 0.35 - dist/20000), shake, 0.015 * shake); if ( Other.Physics != PHYS_Walking ) return; } Momentum = -0.5 * Other.Velocity + 100 * VRand(); Momentum.Z = 7000000.0/((0.4 * dist + 350) * Other.Mass); if (bStomp) Momentum.Z *= 5.0; Other.AddVelocity(Momentum); } function StartMoving() { DesiredSpeed = realSpeed; } function PlayWaiting() { local float decision; local float animspeed; decision = FRand(); animspeed = 0.2 + 0.5 * FRand(); if ( (AnimSequence == 'TBrea001') && (decision < 0.17) ) { SetAlertness(0.0); if (decision < 0.1) { PlaySound(sound'sniff1Ti', SLOT_Talk); LoopAnim('TSnif001', animspeed); } else if (decision < 0.17) LoopAnim('TFist', animspeed); } else { SetAlertness(0.3); LoopAnim('TBrea001', animspeed); } } //PlayPatrolStop(), and PlayWaitingAmbush() all use PlayWaiting(); function PlayPatrolStop() { DesiredSpeed = 0.0; PlayWaiting(); } function PlayWaitingAmbush() { DesiredSpeed = 0.0; PlayWaiting(); } function PlayChallenge() { local float decision; DesiredSpeed = 0.0; decision = FRand(); if ( decision < 0.2 ) PlayAnim('TStom001', 1.0, 0.2); else if ( decision < 0.4 ) PlayAnim('TFist', 1.0, 0.2); else if ( decision < 0.64 ) PlayAnim('TFigh001', 1.0, 0.2); else if ( decision < 0.75 ) { PlaySound(Chest, SLOT_Interact); PlaySound(Chest, SLOT_Misc); PlayAnim('TChest', 1.0, 0.2); } else PlayAnim('TShuffle',1.0, 0.2); } function TweenToFighter(float tweentime) { bEndFootStep = ( (AnimSequence == 'TWalk001') && (AnimFrame > 0.1) ); TweenAnim('TFigh001', tweentime); } function TweenToRunning(float tweentime) { setcollisionsize(55,50); if ( (AnimSequence != 'TWalk001') || !bAnimLoop ) TweenAnim('TWalk001', tweentime); } function TweenToWalking(float tweentime) { setcollisionsize(55,50); TweenAnim('TWalk001', tweentime); } function TweenToWaiting(float tweentime) { TweenAnim('TBrea001', tweentime); } function TweenToPatrolStop(float tweentime) { TweenAnim('TBrea001', tweentime); } function PlayRunning() { setcollisionsize(55,50); LoopAnim('TWalk001', -1.0/GroundSpeed,, 0.8); } function PlayWalking() { setcollisionsize(55,50); LoopAnim('TWalk001', -1.0/GroundSpeed,, 0.8); if (FRand() < 0.4) PlayRoamingSound(); } function PlayThreatening() { local float decision, animspeed; decision = FRand(); animspeed = 0.4 + 0.6 * FRand(); if ( decision < 0.5 ) PlayAnim('TBrea001', animspeed, 0.4); else if ( decision < 0.7 ) { PlaySound(StompSound, SLOT_Talk); PlaySound(StompSound, SLOT_Misc); PlayAnim('TStom001', animspeed, 0.4); } else { PlayThreateningSound(); if ( decision < 0.9 ) PlayAnim('TFist', animspeed, 0.4); else TweenAnim('TFigh001', 0.4); } } function PlayTurning() { DesiredSpeed = 0.0; LoopAnim('TShuffle',, 0.15); } function PlayDying(name DamageType, vector HitLocation) { local float decision; local vector X,Y,Z, projStart; local ut_superring2 s; GetAxes(Rotation,X,Y,Z); Decision = FRand(); projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; s = spawn(class'ut_superring2' ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); s.RemoteRole = ROLE_None; if (Decision < 0.4) PlayAnim('TDeat001', 0.7, 0.15); else if (Decision < 0.7) PlayAnim('TDeat002', 0.7, 0.15); else PlayAnim('TDeat003', 0.7, 0.15); PlaySound(Die, SLOT_Talk); PlaySound(Die, SLOT_Misc); } function PlayTakeHit(float tweentime, vector HitLoc, int Damage) { local float decision; Decision = FRand(); if (Decision < 0.4) TweenAnim('TDeat001', tweentime); else if (Decision < 0.7) TweenAnim('TDeat002', tweentime); else TweenAnim('TDeat003', tweentime); } function SpawnRock() { local Projectile Proj; local vector X,Y,Z, projStart; GetAxes(Rotation,X,Y,Z); MakeNoise(1.0); projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; Proj = spawn(class 'gasbagbelch' ,self,'',projStart,AdjustAim(1000, projStart, 400, false, true)); if( Proj != None ) Proj.SetPhysics(PHYS_Projectile); } function PlayVictoryDance() { DesiredSpeed = 0.0; PlayAnim('TStom001', 0.6, 0.2); //gib the enemy here! PlaySound(StompSound, SLOT_Talk); PlaySound(StompSound, SLOT_Misc); } function PunchDamageTarget() { if ( MeleeDamageTarget(PunchDamage, (70000.0 * (Normal(Target.Location - Location)))) ) { PlaySound(Slap, SLOT_Interact); PlaySound(Slap, SLOT_Misc); } } function SlapDamageTarget() { local vector X,Y,Z; GetAxes(Rotation,X,Y,Z); if ( MeleeDamageTarget(SlapDamage, (70000.0 * ( Y + vect(0,0,1)))) ) { PlaySound(Slap, SLOT_Interact); PlaySound(Slap, SLOT_Misc); } } //Titan doesn't need to face as directly function bool NeedToTurn(vector targ) { local int YawErr; DesiredRotation = rotator(targ - location); DesiredRotation.Yaw = DesiredRotation.Yaw & 65535; YawErr = (DesiredRotation.Yaw - (Rotation.Yaw & 65535)) & 65535; if ( (YawErr < 8000) || (YawErr > 57535) ) return false; return true; } function PlayMeleeAttack() { if (FRand() < 0.45) { PlaySound(sound'Punch1Ti', SLOT_Interact); PlaySound(sound'Punch1Ti', SLOT_Misc); PlayAnim('TPunc001'); } else { PlaySound(swing, SLOT_Interact); PlaySound(swing, SLOT_Misc); PlayAnim('TSlap001'); } } function PlayRangedAttack() { ////log("Play ranged attack"); if ( (AnimSequence == 'TStom001') || (FRand() < 0.7) ) { PlaySound(Throw, SLOT_Interact); PlayAnim('TThro001'); } else { PlayAnim('TStom001'); PlaySound(StompSound, SLOT_Talk); PlaySound(StompSound, SLOT_Misc); } } function ZoneChange(ZoneInfo newZone) { if ( newZone.bPainZone && (newZone.DamageType == 'burned') ) GotoState('LavaDeath'); else Super.ZoneChange(newZone); } state Sitting { ignores SeePlayer, HearNoise, Bump, TakeDamage; function Trigger( actor Other, pawn EventInstigator ) { if ( EventInstigator.bIsPlayer ) { AttitudeToPlayer = ATTITUDE_Hate; Enemy = EventInstigator; GotoState('Sitting', 'GetUp'); } Disable('Trigger'); } function BeginState() { bProjTarget = false; } GetUp: bProjTarget = true; PlayAnim('TGetUp'); FinishAnim(); SetCollisionSize(0, Default.CollisionHeight); SetPhysics(PHYS_Walking); DesiredSpeed = 1.0; Acceleration = vector(Rotation) * AccelRate; PlayAnim('TWalk001'); FinishAnim(); SetCollisionSize(Default.CollisionRadius, Default.CollisionHeight); GotoState('Attacking'); Begin: TweenAnim('TSit', 0.05); SetPhysics(PHYS_None); } state WalkOut { ignores SeePlayer, HearNoise, Bump, TakeDamage; function Trigger( actor Other, pawn EventInstigator ) { if ( EventInstigator.bIsPlayer ) { AttitudeToPlayer = ATTITUDE_Hate; Enemy = EventInstigator; GotoState('WalkOut', 'Walk'); } Disable('Trigger'); } function BeginState() { bProjTarget = false; } Walk: bProjTarget = true; SetPhysics(PHYS_Walking); DesiredSpeed = 1.0; Acceleration = vector(Rotation) * AccelRate; PlayAnim('TWalk001'); FinishAnim(); PlayAnim('TWalk001'); FinishAnim(); GotoState('Attacking'); Begin: TweenAnim('TWalk001', 0.05); SetPhysics(PHYS_None); } state LavaDeath { ignores SeePlayer, HearNoise, Bump, TakeDamage; Begin: ReducedDamageType = 'Burned'; Acceleration = vect(0,0,0); PlaySound(Chest, SLOT_Interact); PlayAnim('TChest'); FinishAnim(); PlayAnim('TDeat002'); FinishAnim(); bLavaTitan = true; TweenAnim('TDeat001', 2.0); GotoState('Attacking'); } lI//============================================================================= // BigGib. //============================================================================= class BigGib expands Pickup; var() int HealingAmount; var() bool bSuperHeal; var bool bPlayerCarcass; var bool bDecorative; var PlayerReplicationInfo PlayerOwner; var UT_Bloodtrail trail; var float TrailSize; var bool bGreenBlood; var name CarcassAnim; var() localized string DeZombifiedMessage; //-------------------- //spawns minigibs here simulated function ClientExtraChunks() { local mediumgib carc; local smallgib carc2; local UT_bloodburst b; local PlayerPawn P; If ( Level.NetMode == NM_DedicatedServer ) return; if ( class'GameInfo'.Default.bLowGore ) { Destroy(); return; } b = Spawn(class 'UT_BloodBurst'); if ( bGreenBlood ) b.GreenBlood(); b.RemoteRole = ROLE_None; if ( (CarcassAnim != 'Dead4') && (CarcassAnim != 'Dead5') ) { carc = Spawn(class'MediumGib'); if ( carc != None ) carc.Initfor(self); } if ( CarcassAnim != 'Dead5' ) { if ( Level.bHighDetailMode && !Level.bDropDetail ) { if ( FRand() < 0.3 ) { carc = Spawn(class 'MediumGib'); carc2 = Spawn(class 'SmallGib'); if (carc != None) carc.Initfor(self); if (carc2 != None) carc2.Initfor(self); } else if ( FRand() < 0.5 ) { carc = Spawn(class 'MediumGib'); carc2 = Spawn(class 'SmallGib'); if (carc != None) carc.Initfor(self); if (carc2 != None) carc2.Initfor(self); } else { carc = Spawn(class 'MediumGib'); if (carc != None) carc.Initfor(self); } if ( FRand() < 0.5 ) { carc = Spawn(class 'MediumGib'); if (carc != None) carc.Initfor(self); } } carc = Spawn(class 'MediumGib'); if (carc != None) carc.Initfor(self); carc2 = Spawn(class 'SmallGib'); if (carc2 != None) carc2.Initfor(self); } if ( !Level.bDropDetail ) { carc = Spawn(class 'MediumGib'); if (carc != None) carc.Initfor(self); } carc = Spawn(class 'MediumGib'); if (carc != None) carc.Initfor(self); } function InitVelocity(Actor Other) { local vector RandDir; RandDir = 700 * FRand() * VRand(); RandDir.Z = 200 * FRand() - 50; Velocity = (0.2 + FRand()) * (other.Velocity + RandDir); If (Region.Zone.bWaterZone) Velocity *= 0.5; } function Initfor(actor Other) { if ( Other.IsA('Carcass') ) PlayerOwner = Carcass(Other).PlayerOwner; bDecorative = false; DrawScale = Other.DrawScale; if ( DrawScale != 1.0 ) SetCollisionSize(CollisionRadius * 0.5 * (1 + DrawScale), CollisionHeight * 0.5 * (1 + DrawScale)); InitVelocity(Other); if ( TrailSize > 0 ) { if ( UTHumanCarcass(Other) != None ) bGreenBlood = UTHumanCarcass(Other).bGreenBlood; else if ( (UTCreatureChunks(Other) != None) ) bGreenBlood = UTCreatureChunks(Other).bGreenBlood; } if ( FRand() < 0.3 ) Buoyancy = 1.06 * Mass; // float corpse else Buoyancy = 0.94 * Mass; if ( Level.NetMode != NM_Client ) //only if server ClientExtraChunks(); } event float BotDesireability(Pawn Bot) { local float desire; local int HealMax; HealMax = Bot.Default.fatness; if (bSuperHeal) HealMax = Min(199, HealMax * 2.0); desire = Min(HealingAmount, HealMax - Bot.fatness); if ( (Bot.Weapon != None) && (Bot.Weapon.AIRating > 0.5) ) desire *= 2.5; if ( Bot.fatness < 128 ) return ( FMin(0.03 * desire, 3.2) ); else { if ( desire > 6 ) desire = FMax(desire,25); return ( FMin(0.017 * desire, 3.0) ); } } function PlayPickupMessage(Pawn Other) { Other.ReceiveLocalizedMessage( class'PickupMessageHealthPlus', 0, None, None, Self.Class ); } //------------------------- //what to do when picked up auto state Pickup { function Touch( actor Other ) { local int HealMax; local Pawn P; if ( ValidTouch(Other) ) { P = Pawn(Other); HealMax = P.default.fatness; if (bSuperHeal) HealMax = Min(199, HealMax * 2.0); //checks the fatness if ((P.health > 0) &&(P.fatness < 115)) { if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogPickup(Self, P); if (Level.Game.WorldLog != None) Level.Game.WorldLog.LogPickup(Self, P); //------------------------------------ //adds health and groundspeed //to zombie P.PlayerReplicationInfo.Score +=1; P.Health += HealingAmount; P.lightbrightness -= HealingAmount; PlayPickupMessage(P); PlaySound (PickupSound,,2.5); Other.MakeNoise(0.2); SetRespawn(); } } } } p//============================================================================= // CorpseRulesSClient. //============================================================================= class CorpseRulesSClient expands UWindowScrollingDialogClient; function Created() { ClientClass = class'CorpseRulesCWindow'; FixedAreaClass = None; Super.Created(); } t u t m yuT%#w*a$ 'a$ ' w b]%#w*a$ 'a$ ' x kf~3w* >a$ 'a$ ' Y?a $ 'a $ ' |w*a$ 'a$ ' y x{N r* 4?a$ 'a$ 'La$ 'a$ ' *n r ^ C c. ~ [. A B C b{e.\$)a\BHBa!" L? E g4$;a\BHBa!" L?9>k r dUQ'a!C > I dK Xo b,3a!J?L>at$at$ L t-CAU:pG al$al$ S@[EY 0I+ff>a $a $a!jGa}$a}$a!q R /1P2!J 333?ay$a!fNa!Jat$at$ U 3 V W X Y Mz !4 -( ] 6 ^ _ ` a Zs!7 -( le J,9l!O#aE$a!Iaa!@a-g'a&!A@q!x d\f *9 g h i j p AP8/-- b e AN S7bD*ppp [SD]: | s O{|B, q f QN0!^ %-(-#(-(% R  Y    &-'-#(-'D R  Y  ,-(-#'-(% e  ~     ZY Lu q!a x !QY::$96?,xY6-333?{::$PGa!>-(a { ndC q!a | J tf kcw.*L>4>8 `` ?,8 i8  } !g ]33s@a Rw.* aL>'[a( ~ qe ,"- ?N-' OzD//============================================================================= // ZombieMaster. //============================================================================= class ZombieMaster expands Zombie; function TweenToRunning(float tweentime) { setcollisionsize(30,65); if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if ( ((AnimSequence != 'Run') && (AnimSequence != 'RunFire')) || !bAnimLoop) { if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else TweenAnim('Walk', tweentime); } } function TweenToWalking(float tweentime) { setcollisionsize(30,65); if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else if ( Weapon != None ) TweenAnim('WalkTool', tweentime); else TweenAnim('Walk', tweentime); } function PlayRunning() { setcollisionsize(30,65); if (Region.Zone.bWaterZone) { PlaySwimming(); return; } LoopAnim('Walk', -1.3/GroundSpeed,,0.4); } function PlayWalking() { setcollisionsize(30,65); if (Region.Zone.bWaterZone) { PlaySwimming(); return; } if ( Weapon != None ) LoopAnim('WalkTool', -3/GroundSpeed,,0.4); else LoopAnim('Walk', -3/GroundSpeed,,0.4); } function ShootTarget() { local vector X,Y,Z, projStart; GetAxes(Rotation,X,Y,Z); FireProjectile( vect(1, 0, 0.8), 900); projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; spawn(RangedProjectile ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); } function PlayRangedAttack() { local vector X,Y,Z, projStart; GetAxes(Rotation,X,Y,Z); if (Region.Zone.bWaterZone) PlayAnim('Victory1L'); else PlayAnim('Victory1'); projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; spawn(RangedProjectile ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); } Q G q!a D!L Y::$96?,xY6-333?{::$PGa!>-(a Gn_ q!a HF o kcw.*L>4>8 `` ?,8 i8  I!} ]33s@a Rw.* aL>'[a( Jq ,"- ?N-' I " r* r*  ,5o//============================================================================= // CorpseRulesCWindow. //============================================================================= class CorpseRulesCWindow expands UTRulesCWindow; // game style var UWindowComboControl StyleCombo; var() localized string StyleText; var() localized string Styles[3]; var() localized string StyleHelp; // Time Limit var UWindowHsliderControl TimeSlider; var UWindowEditControl TimeEditBox; var int TimeSlider2; // Tourney var UWindowCheckbox TourneyCheck2; var() localized string TourneyText; var() localized string TourneyHelp; // Lives var UWindowEditControl LivesEdit; var() localized string LivesText; var() localized string LivesHelp; var() localized string GibCText; var() localized string GibCHelp; // amount of undead var UWindowHsliderControl slider2; var() localized string slider2Help; var() localized string slider2text; var UWindowEditControl UndeadEditBox; var int AmountofUndead2; // amount of gibs var UWindowHsliderControl slider; var() localized string sliderHelp; var() localized string slidertext; var UWindowEditControl GibEditBox; var int AmountofGibs2; // AI Zombies var UWindowcheckbox aizombies; var() localized string aizombiesText; var() localized string aizombiesHelp; // ExessiveMode var UWindowcheckbox exessivemode; var() string exessivemodeText; var() string exessivemodeHelp; // NoWeapons var UWindowcheckbox noweapons; var() string noweaponsText; var() string noweaponsHelp; // DarkMode var UWindowCheckbox darkmode; var() string darkmodeText; var() string darkmodeHelp; // MaxUndead var UWindowHsliderControl maxundead; var UWindowEditControl maxundeadEditBox; var() localized string maxundeadHelp; var() localized string maxundeadtext; var int maxundead2; function Created() { local int FFS; local int ControlWidth, ControlLeft, ControlRight; local int CenterWidth, CenterPos, ButtonWidth, ButtonLeft; Super.Created(); ControlWidth = WinWidth/2.5; ControlLeft = (WinWidth/2 - ControlWidth)/2; ControlRight = WinWidth/2 + ControlLeft; CenterWidth = (WinWidth/4)*3; CenterPos = (WinWidth - CenterWidth)/2; ButtonWidth = WinWidth - 140; ButtonLeft = WinWidth - ButtonWidth - 40; Initialized = False; // game style combo box StyleCombo = UWindowComboControl(CreateControl(class'UWindowComboControl', ControlLeft, 10, 80, 1)); StyleCombo.SetText(StyleText); StyleCombo.SetHelpText(StyleHelp); StyleCombo.SetFont(F_Normal); StyleCombo.SetEditable(False); StyleCombo.AddItem(Styles[0]); StyleCombo.AddItem(Styles[1]); StyleCombo.AddItem(Styles[3]); ControlOffset += 25; // Time Limit TimeSlider = UWindowHSliderControl(CreateControl(class'UWindowHSliderControl', ControlRight, 46, ControlRight, 1)); TimeSlider.SetRange(1, 25, 1); TimeSlider2 = Class(BotmatchParent.GameClass).Default.TimeLimit; TimeSlider.SetValue(TimeSlider2); TimeSlider.SetText(TimeText$" ["$TimeSlider2$"]:"); TimeSlider.SetHelpText(TimeHelp); TimeSlider.SetFont(F_Normal); // Lives LivesEdit = UWindowEditControl(CreateControl(class'UWindowEditControl', ControlLeft, 46, ControlWidth, 1)); LivesEdit.SetText(LivesText); LivesEdit.SetHelpText(LivesHelp); LivesEdit.SetFont(F_Normal); LivesEdit.SetNumericOnly(True); LivesEdit.SetMaxLength(3); LivesEdit.Align = TA_Right; // amount of undead Slider2= UWindowHSliderControl(CreateControl(class'UWindowHSliderControl', CenterPos, 89, CenterWidth, 1)); Slider2.SetRange(1, 3, 1); amountofundead2 = Class(BotmatchParent.GameClass).Default.amountofundead; Slider2.SetValue(amountofgibs2); Slider2.SetText(slider2Text$" ["$amountofundead2$"%]:"); Slider2.SetHelpText(slider2Help); Slider2.SetFont(F_Normal); // amount of gibs Slider = UWindowHSliderControl(CreateControl(class'UWindowHSliderControl', CenterPos, 104, CenterWidth, 1)); Slider.SetRange(1, 5, 1); amountofgibs2 = Class(BotmatchParent.GameClass).Default.amountofgibs; Slider.SetValue(amountofgibs2); Slider.SetText(sliderText$" ["$amountofgibs2$"%]:"); Slider.SetHelpText(sliderHelp); Slider.SetFont(F_Normal); // Tourney TourneyCheck2 = UWindowCheckbox(CreateControl(class'UWindowCheckbox', ControlRight, 120, 85, 1)); TourneyCheck2.SetText(TourneyText); TourneyCheck2.SetHelpText(TourneyHelp); TourneyCheck2.SetFont(F_Normal); TourneyCheck2.Align = TA_Right; aizombies = UWindowCheckbox(CreateControl(class'UWindowCheckbox', ControlLeft, 160, ControlWidth, 1)); aizombies.SetText(aizombiesText); aizombies.SetHelpText(aizombiesHelp); aizombies.SetFont(F_Normal); aizombies.bChecked = Class(BotmatchParent.GameClass).Default.aizombies; aizombies.Align = TA_Right; exessivemode = UWindowCheckbox(CreateControl(class'UWindowCheckbox', ControlLeft, 190, ControlWidth, 1)); exessivemode.SetText(exessivemodeText); exessivemode.SetHelpText(exessivemodeHelp); exessivemode.SetFont(F_Normal); exessivemode.bChecked = Class(BotmatchParent.GameClass).Default.exessivemode; exessivemode.Align = TA_Right; // DarkMode darkmode = UWindowCheckbox(CreateControl(class'UWindowCheckbox', ControlLeft, 175, ControlWidth, 1)); darkmode.SetText(darkmodeText); darkmode.SetHelpText(darkmodeHelp); darkmode.SetFont(F_Normal); darkmode.bChecked = Class(BotmatchParent.GameClass).Default.darkmode; darkmode.Align = TA_Right; //ControlOffset += 25; noweapons = UWindowCheckbox(CreateControl(class'UWindowCheckbox', Controlright, 160, 85, 1)); noweapons.SetText(noweaponsText); noweapons.SetHelpText(noweaponsHelp); noweapons.SetFont(F_Normal); noweapons.bChecked = Class(BotmatchParent.GameClass).Default.bnoweapons; noweapons.Align = TA_Right; // Max Undead maxundead = UWindowHSliderControl(CreateControl(class'UWindowHSliderControl', CenterPos, 140, ControlWidth, 1)); maxundead.SetRange(25, 900, 25); maxundead2 = Class(BotmatchParent.GameClass).Default.maxundead; maxundead.SetValue(maxundead2); maxundead.SetText(maxundeadText$" ["$maxundead2$"]:"); maxundead.SetHelpText(maxundeadHelp); maxundead.SetFont(F_Normal); DesiredWidth = 270; DesiredHeight = ControlOffset; Initialized = False; if ( Class(BotmatchParent.GameClass).Default.bzombiebeatdown ){ StyleCombo.SetSelectedIndex(1); Class(BotmatchParent.GameClass).Default.bteamgame = true; Class(BotmatchParent.GameClass).Default.TimeLimit = int(TimeSlider.GetValue()); LivesEdit.SetText(LivesText); LivesEdit.SetHelpText(LivesHelp); slider2.showwindow(); TimeSlider.showwindow(); maxundead.showwindow(); forcerespawncheck.hidewindow(); } else if ( Class(BotmatchParent.GameClass).Default.bgibcollect ){ StyleCombo.SetSelectedIndex(2); Class(BotmatchParent.GameClass).Default.bteamgame = false; Class(BotmatchParent.GameClass).Default.TimeLimit = 0; LivesEdit.SetText(GibCText); LivesEdit.SetHelpText(GibCHelp); slider2.hidewindow(); TimeSlider.hidewindow(); maxundead.hidewindow(); forcerespawncheck.showwindow(); } else { StyleCombo.SetSelectedIndex(0); Class(BotmatchParent.GameClass).Default.bteamgame = false; Class(BotmatchParent.GameClass).Default.TimeLimit = 0; LivesEdit.SetText(LivesText); LivesEdit.SetHelpText(LivesHelp); slider2.hidewindow(); TimeSlider.hidewindow(); maxundead.hidewindow(); forcerespawncheck.showwindow(); } LivesEdit.SetValue(string(Class(BotmatchParent.GameClass).Default.Lives)); TimeSlider.SetValue(Class(BotmatchParent.GameClass).Default.TimeLimit); slider2.SetValue(class'CorpseMania.CorpseMania'.default.amountofundead, true); slider.SetValue(class'CorpseMania.CorpseMania'.default.amountofgibs, true); maxundead.SetValue(class'CorpseMania.CorpseMania'.default.maxundead, true); TourneyCheck2.bChecked = Class(BotmatchParent.GameClass).Default.bTournament; exessivemode.bChecked = Class(BotmatchParent.GameClass).Default.exessivemode; darkmode.bChecked = Class(BotmatchParent.GameClass).Default.darkmode; noweapons.bChecked = Class(BotmatchParent.GameClass).Default.bnoweapons; FragEdit.HideWindow(); // lose the fraglimit textbox ( this is the way the teamgames do it, so its good enough for me) WeaponsCheck.hidewindow(); timeedit.hidewindow(); TourneyCheck.hidewindow(); Initialized = True; } function SetupNetworkOptions() { local int ControlWidth, ControlLeft, ControlRight; local int CenterWidth, CenterPos, ButtonWidth, ButtonLeft; // don't call UTRulesCWindow's version (force respawn) Super(UMenuGameRulesBase).SetupNetworkOptions(); ControlWidth = WinWidth/2.5; ControlLeft = (WinWidth/2 - ControlWidth)/2; ControlRight = WinWidth/2 + ControlLeft; CenterWidth = (WinWidth/4)*3; CenterPos = (WinWidth - CenterWidth)/2; ControlOffset += 25; if(BotmatchParent.bNetworkGame) { if(ClassIsChildOf(BotmatchParent.GameClass, class'CTFGame')) ControlOffset -= 25; ForceRespawnCheck = UWindowCheckbox(CreateControl(class'UWindowCheckbox', ControlLeft, ControlOffset, ControlWidth, 1)); ForceRespawnCheck.SetText(ForceRespawnText); ForceRespawnCheck.SetHelpText(ForceRespawnHelp); ForceRespawnCheck.SetFont(F_Normal); ForceRespawnCheck.Align = TA_Right; ControlOffset += 25; } } function BeforePaint(Canvas C, float X, float Y) { local int ControlWidth, ControlLeft, ControlRight; local int CenterWidth, CenterPos, ButtonWidth, ButtonLeft; Super.BeforePaint(C, X, Y); ControlWidth = WinWidth/2.5; ControlLeft = (WinWidth/2 - ControlWidth)/2; ControlRight = WinWidth/2 + ControlLeft; CenterWidth = (WinWidth/4)*3; CenterPos = (WinWidth - CenterWidth)/2; StyleCombo.SetSize(CenterWidth, 1); StyleCombo.WinLeft = CenterPos; StyleCombo.EditBoxWidth = 110; LivesEdit.SetSize(60, 1); LivesEdit.WinLeft = ControlLeft; LivesEdit.EditBoxWidth = 20; TimeSlider.SetSize(120, 1); TimeSlider.SliderWidth = 50; TimeSlider.WinLeft = ControlRight; Slider2.SetSize(CenterWidth, 1); Slider2.SliderWidth = 105; Slider2.WinLeft = CenterPos; Slider.SetSize(CenterWidth, 1); Slider.SliderWidth = 105; Slider.WinLeft = CenterPos; TourneyCheck2.SetSize(100, 1); TourneyCheck2.WinLeft = ControlRight; ForceRespawnCheck.SetSize(100, 1); ForceRespawnCheck.WinLeft = ControlLeft; //aizombies aizombies.SetSize(100, 1); aizombies.WinLeft = ControlLeft; //exessivemode exessivemode.SetSize(100, 1); exessivemode.WinLeft = ControlLeft; //darkmode darkmode.SetSize(100, 1); darkmode.WinLeft = ControlLeft; //noweapons noweapons.SetSize(100, 1); noweapons.WinLeft = Controlright; //maxundead maxundead.SetSize(192, 1); maxundead.SliderWidth = 105; maxundead.WinLeft = CenterPos; if(ForceRespawnCheck != None && ClassIsChildOf(BotmatchParent.GameClass, class'CTFGame')) ForceRespawnCheck.WinLeft = ControlRight; } function Notify(UWindowDialogControl C, byte E) { if (!Initialized) return; Super.Notify(C, E); switch(E) { case DE_Change: switch (C) { case StyleCombo: StyleChanged(); break; case LivesEdit: LivesChanged(); break; case TimeSlider: TimeSliderChanged(); break; case TourneyCheck2: TourneyChanged2(); break; case slider2: slider2Changed(); break; case slider: sliderChanged(); break; case aizombies: aizombieschecked(); break; case exessivemode: exessivemodechecked(); break; case darkmode: darkmodeChecked(); break; case noweapons: noweaponsChecked(); break; case maxundead: maxundeadChanged(); break; } } } function StyleChanged() { switch (StyleCombo.GetSelectedIndex()) { case 0: Class(BotmatchParent.GameClass).Default.bZombieBeatdown = false; Class(BotmatchParent.GameClass).Default.bGibCollect = false; Class(BotmatchParent.GameClass).Default.bteamgame = false; Class(BotmatchParent.GameClass).Default.TimeLimit = 0; LivesEdit.SetText(LivesText); LivesEdit.SetHelpText(LivesHelp); slider2.hidewindow(); TimeSlider.hidewindow(); maxundead.hidewindow(); forcerespawncheck.showwindow(); break; case 1: Class(BotmatchParent.GameClass).Default.bZombieBeatdown = true; Class(BotmatchParent.GameClass).Default.bGibCollect = false; Class(BotmatchParent.GameClass).Default.bteamgame = true; Class(BotmatchParent.GameClass).Default.TimeLimit = int(TimeSlider.GetValue()); LivesEdit.SetText(LivesText); LivesEdit.SetHelpText(LivesHelp); slider2.showwindow(); TimeSlider.showwindow(); maxundead.showwindow(); forcerespawncheck.hidewindow(); break; case 2: Class(BotmatchParent.GameClass).Default.bZombieBeatdown = false; Class(BotmatchParent.GameClass).Default.bGibCollect = true; Class(BotmatchParent.GameClass).Default.bteamgame = false; Class(BotmatchParent.GameClass).Default.TimeLimit = 0; LivesEdit.SetText(GibCText); LivesEdit.SetHelpText(GibCHelp); slider2.hidewindow(); TimeSlider.hidewindow(); maxundead.hidewindow(); forcerespawncheck.showwindow(); break; } } function LivesChanged() { Class(BotmatchParent.GameClass).Default.Lives = int(LivesEdit.GetValue()); } // replaces UMenuGameRulesCWindow's version function TimeSliderChanged() { Class(BotmatchParent.GameClass).Default.TimeLimit = int(TimeSlider.GetValue()); TimeSlider.SetText(TimeText$" ["$int(TimeSlider.GetValue())$"]:"); } function TourneyChanged2() { Class(BotmatchParent.GameClass).Default.bTournament = TourneyCheck.bChecked; } function slider2Changed() { Class(BotmatchParent.GameClass).Default.amountofundead = int(slider2.GetValue()); Slider2.SetText(slider2Text$" ["$int(Slider2.GetValue())$"%]:"); } function sliderChanged() { Class(BotmatchParent.GameClass).Default.amountofgibs = int(slider.GetValue()); Slider.SetText(sliderText$" ["$int(Slider.GetValue())$"%]:"); } function aizombieschecked() { Class(BotmatchParent.GameClass).Default.aizombies= aizombies.bChecked; } function exessivemodechecked() { Class(BotmatchParent.GameClass).Default.exessivemode= exessivemode.bChecked; } function darkmodeChecked() { Class(BotmatchParent.GameClass).Default.darkmode= darkmode.bChecked; } function noweaponsChecked() { Class(BotmatchParent.GameClass).Default.bnoweapons= noweapons.bChecked; } function maxundeadChanged() { Class(BotmatchParent.GameClass).Default.maxundead = int(maxundead.GetValue()); maxundead.SetText(maxundeadText$" ["$int(maxundead.GetValue())$"]:"); }  PQRh"y}//============================================================================= // Zombie. //============================================================================= class Zombie expands ScriptedPawn; #exec MESH IMPORT MESH=Male1 ANIVFILE=MODELS\Male1_a.3D DATAFILE=..\unrealshare\MODELS\Male_d.3D X=0 Y=0 Z=0 ZEROTEX=1 #exec MESH ORIGIN MESH=Male1 X=150 Y=80 Z=0 YAW=64 ROLL=-64 #exec MESH SEQUENCE MESH=Male1 SEQ=All STARTFRAME=0 NUMFRAMES=473 #exec MESH SEQUENCE MESH=Male1 SEQ=GutHit STARTFRAME=0 NUMFRAMES=1 Group=TakeHit #exec MESH SEQUENCE MESH=Male1 SEQ=AimDnLg STARTFRAME=1 NUMFRAMES=1 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=AimDnSm STARTFRAME=2 NUMFRAMES=1 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=AimUpLg STARTFRAME=3 NUMFRAMES=1 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=AimUpSm STARTFRAME=4 NUMFRAMES=1 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=Taunt1 STARTFRAME=5 NUMFRAMES=7 RATE=6 Group=Gesture #exec MESH SEQUENCE MESH=Male1 SEQ=Breath1 STARTFRAME=12 NUMFRAMES=7 RATE=6 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=Breath2 STARTFRAME=19 NUMFRAMES=6 RATE=6 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=CockGun STARTFRAME=25 NUMFRAMES=8 RATE=6 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=Dead2 STARTFRAME=33 NUMFRAMES=16 RATE=15 Group=TakeHit #exec MESH SEQUENCE MESH=Male1 SEQ=Dead3 STARTFRAME=49 NUMFRAMES=13 RATE=15 Group=TakeHit #exec MESH SEQUENCE MESH=Male1 SEQ=Dead4 STARTFRAME=62 NUMFRAMES=16 RATE=15 Group=TakeHit #exec MESH SEQUENCE MESH=Male1 SEQ=Dead5 STARTFRAME=78 NUMFRAMES=23 RATE=15 Group=TakeHit #exec MESH SEQUENCE MESH=Male1 SEQ=Dead6 STARTFRAME=101 NUMFRAMES=28 RATE=15 #exec MESH SEQUENCE MESH=Male1 SEQ=Dead7 STARTFRAME=129 NUMFRAMES=21 RATE=15 #exec MESH SEQUENCE MESH=Male1 SEQ=DeathEnd STARTFRAME=457 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Male1 SEQ=DeathEnd2 STARTFRAME=48 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Male1 SEQ=DeathEnd3 STARTFRAME=61 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Male1 SEQ=DuckWlkL STARTFRAME=150 NUMFRAMES=15 RATE=15 Group=Ducking #exec MESH SEQUENCE MESH=Male1 SEQ=DuckWlkS STARTFRAME=165 NUMFRAMES=15 RATE=15 Group=Ducking #exec MESH SEQUENCE MESH=Male1 SEQ=HeadHit STARTFRAME=180 NUMFRAMES=1 Group=TakeHit #exec MESH SEQUENCE MESH=Male1 SEQ=JumpLgFr STARTFRAME=181 NUMFRAMES=1 Group=Jumping #exec MESH SEQUENCE MESH=Male1 SEQ=JumpSmFr STARTFRAME=182 NUMFRAMES=1 Group=Jumping #exec MESH SEQUENCE MESH=Male1 SEQ=LandLgFr STARTFRAME=183 NUMFRAMES=1 Group=Landing #exec MESH SEQUENCE MESH=Male1 SEQ=LandSmFr STARTFRAME=184 NUMFRAMES=1 Group=Landing #exec MESH SEQUENCE MESH=Male1 SEQ=LeftHit STARTFRAME=185 NUMFRAMES=1 Group=TakeHit #exec MESH SEQUENCE MESH=Male1 SEQ=Look STARTFRAME=186 NUMFRAMES=25 RATE=15 Group=Waiting //FIXME - can't use! - make much more subtle #exec MESH SEQUENCE MESH=Male1 SEQ=RightHit STARTFRAME=211 NUMFRAMES=1 Group=TakeHit #exec MESH SEQUENCE MESH=Male1 SEQ=RunLg STARTFRAME=212 NUMFRAMES=10 RATE=17 #exec MESH SEQUENCE MESH=Male1 SEQ=RunLgFr STARTFRAME=222 NUMFRAMES=10 RATE=17 #exec MESH SEQUENCE MESH=Male1 SEQ=RunSm STARTFRAME=232 NUMFRAMES=10 RATE=17 #exec MESH SEQUENCE MESH=Male1 SEQ=RunSmFr STARTFRAME=242 NUMFRAMES=10 RATE=17 #exec MESH SEQUENCE MESH=Male1 SEQ=StillFrRp STARTFRAME=252 NUMFRAMES=15 RATE=15 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=StillLgFr STARTFRAME=267 NUMFRAMES=10 RATE=15 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=StillSmFr STARTFRAME=277 NUMFRAMES=8 RATE=15 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=SwimLg STARTFRAME=285 NUMFRAMES=15 RATE=15 #exec MESH SEQUENCE MESH=Male1 SEQ=SwimSm STARTFRAME=300 NUMFRAMES=15 RATE=15 #exec MESH SEQUENCE MESH=Male1 SEQ=TreadLg STARTFRAME=315 NUMFRAMES=15 RATE=15 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=TreadSm STARTFRAME=330 NUMFRAMES=15 RATE=15 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=Victory1 STARTFRAME=345 NUMFRAMES=25 RATE=15 Group=Gesture #exec MESH SEQUENCE MESH=Male1 SEQ=WalkLg STARTFRAME=370 NUMFRAMES=15 RATE=17 #exec MESH SEQUENCE MESH=Male1 SEQ=WalkLgFr STARTFRAME=385 NUMFRAMES=15 RATE=17 #exec MESH SEQUENCE MESH=Male1 SEQ=WalkSm STARTFRAME=400 NUMFRAMES=15 RATE=17 #exec MESH SEQUENCE MESH=Male1 SEQ=WalkSmFr STARTFRAME=415 NUMFRAMES=15 RATE=17 #exec MESH SEQUENCE MESH=Male1 SEQ=Wave STARTFRAME=430 NUMFRAMES=15 RATE=15 Group=Gesture #exec MESH SEQUENCE MESH=Male1 SEQ=Dead1 STARTFRAME=445 NUMFRAMES=13 RATE=15 #exec MESH SEQUENCE MESH=Male1 SEQ=Walk STARTFRAME=458 NUMFRAMES=15 RATE=15 #exec MESH SEQUENCE MESH=Male1 SEQ=TurnSm STARTFRAME=415 NUMFRAMES=2 #exec MESH SEQUENCE MESH=Male1 SEQ=TurnLg STARTFRAME=385 NUMFRAMES=2 #exec MESH SEQUENCE MESH=Male1 SEQ=Taunt1L STARTFRAME=473 NUMFRAMES=7 RATE=6 Group=Gesture #exec MESH SEQUENCE MESH=Male1 SEQ=Breath1L STARTFRAME=480 NUMFRAMES=7 RATE=6 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=Breath2L STARTFRAME=487 NUMFRAMES=6 RATE=6 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=CockGunL STARTFRAME=493 NUMFRAMES=8 RATE=6 Group=Waiting #exec MESH SEQUENCE MESH=Male1 SEQ=LookL STARTFRAME=501 NUMFRAMES=25 RATE=15 Group=Waiting //FIXME - can't use! - make much more subtle #exec MESH SEQUENCE MESH=Male1 SEQ=Victory1L STARTFRAME=526 NUMFRAMES=25 RATE=15 Group=Gesture #exec MESH SEQUENCE MESH=Male1 SEQ=WaveL STARTFRAME=551 NUMFRAMES=15 RATE=15 Group=Gesture #exec TEXTURE IMPORT NAME=Kurgan FILE=..\unrealshare\MODELS\Kurgan.PCX GROUP=Skins #exec MESHMAP SCALE MESHMAP=Male1 X=0.056 Y=0.056 Z=0.112 #exec MESHMAP SETTEXTURE MESHMAP=Male1 NUM=0 TEXTURE=Kurgan #exec MESH NOTIFY MESH=Male1 SEQ=RunLG TIME=0.25 FUNCTION=PlayFootStep #exec MESH NOTIFY MESH=Male1 SEQ=RunLG TIME=0.75 FUNCTION=PlayMetalStep #exec MESH NOTIFY MESH=Male1 SEQ=RunLGFR TIME=0.25 FUNCTION=PlayFootStep #exec MESH NOTIFY MESH=Male1 SEQ=RunLGFR TIME=0.75 FUNCTION=PlayMetalStep #exec MESH NOTIFY MESH=Male1 SEQ=RunSM TIME=0.25 FUNCTION=PlayFootStep #exec MESH NOTIFY MESH=Male1 SEQ=RunSM TIME=0.75 FUNCTION=PlayMetalStep #exec MESH NOTIFY MESH=Male1 SEQ=RunSMFR TIME=0.25 FUNCTION=PlayFootStep #exec MESH NOTIFY MESH=Male1 SEQ=RunSMFR TIME=0.75 FUNCTION=PlayMetalStep #exec MESH NOTIFY MESH=Male1 SEQ=WalkLG TIME=0.25 FUNCTION=PlayFootStep #exec MESH NOTIFY MESH=Male1 SEQ=WalkLG TIME=0.75 FUNCTION=PlayMetalStep #exec MESH NOTIFY MESH=Male1 SEQ=WalkLGFR TIME=0.25 FUNCTION=PlayFootStep #exec MESH NOTIFY MESH=Male1 SEQ=WalkLGFR TIME=0.75 FUNCTION=PlayMetalStep #exec MESH NOTIFY MESH=Male1 SEQ=WalkSM TIME=0.25 FUNCTION=PlayFootStep #exec MESH NOTIFY MESH=Male1 SEQ=WalkSM TIME=0.75 FUNCTION=PlayMetalStep #exec MESH NOTIFY MESH=Male1 SEQ=WalkSMFR TIME=0.25 FUNCTION=PlayFootStep #exec MESH NOTIFY MESH=Male1 SEQ=WalkSMFR TIME=0.75 FUNCTION=PlayMetalStep #exec MESH NOTIFY MESH=Male1 SEQ=Dead2 TIME=0.92 FUNCTION=LandThump #exec MESH NOTIFY MESH=Male1 SEQ=Dead3 TIME=0.45 FUNCTION=LandThump #exec MESH NOTIFY MESH=Male1 SEQ=Dead4 TIME=0.54 FUNCTION=LandThump #exec MESH NOTIFY MESH=Male1 SEQ=Dead5 TIME=0.68 FUNCTION=LandThump #exec MESH NOTIFY MESH=Male1 SEQ=Dead6 TIME=0.57 FUNCTION=LandThump #exec MESH NOTIFY MESH=Male1 SEQ=Dead7 TIME=0.78 FUNCTION=LandThump #exec TEXTURE IMPORT NAME=JMale2 FILE=MODELS\HML_1.PCX GROUP=Skins #exec TEXTURE IMPORT NAME=JMale3 FILE=MODELS\HML_2.PCX GROUP=Skins #exec TEXTURE IMPORT NAME=JMale4 FILE=MODELS\HML_3.PCX GROUP=Skins #exec TEXTURE IMPORT NAME=JMale5 FILE=MODELS\HML_4.PCX GROUP=Skins #exec TEXTURE IMPORT NAME=JMale6 FILE=MODELS\HML_5.PCX GROUP=Skins #exec TEXTURE IMPORT NAME=JMale7 FILE=MODELS\HML_6.PCX GROUP=Skins #exec TEXTURE IMPORT NAME=JMale8 FILE=MODELS\HML_7.PCX GROUP=Skins #exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\male\metal01.WAV" NAME="metwalk1" GROUP="Male" #exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\male\metal02.WAV" NAME="metwalk2" GROUP="Male" #exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\male\metal03.WAV" NAME="metwalk3" GROUP="Male" //==================================================================== // Nali Variables var() bool bNeverBow; var bool bCringing; var bool bGesture; var bool bFading; var bool bHasWandered; var(Sounds) sound syllable1; var(Sounds) sound syllable2; var(Sounds) sound syllable3; var(Sounds) sound syllable4; var(Sounds) sound syllable5; var(Sounds) sound syllable6; var(Sounds) sound urgefollow; var(Sounds) sound cringe; var(Sounds) sound cough; var(Sounds) sound sweat; var(Sounds) sound bowing; var(Sounds) sound backup; var(Sounds) sound pray; var(Sounds) sound breath; var() Weapon Tool; var() localized string Zombified; var bool bFirstAttack; var() byte ClawDamage; function PostBeginPlay() { Super.PostBeginPlay(); bCanSpeak = true; } function eAttitude AttitudeWithFear() { return ATTITUDE_Hate; } function damageAttitudeTo(pawn Other) { local eAttitude OldAttitude; if ( (Other == Self) || (Other == None) || (FlockPawn(Other) != None) ) return; if( Other.bIsPlayer ) //change attitude to player AttitudeToPlayer = ATTITUDE_HATE; else if ( ScriptedPawn(Other) == None ) Hated = Other; SetEnemy(Other); } function eAttitude AttitudeToCreature(Pawn Other) { if ( Other.IsA('Zombie') ) return ATTITUDE_Friendly; else if ( Other.IsA('Ghoul') ) return ATTITUDE_Friendly; else if ( Other.IsA('ScriptedPawn') && Other.fatness < 115 ) return ATTITUDE_Friendly; else if ( Other.IsA('Bot') ) return ATTITUDE_Hate; // else if ( Other.bIsPlayer && Other.fatness < 100) // return ATTITUDE_Friendly; else return ATTITUDE_Hate; } function Step() { PlaySound(sound'WalkC', SLOT_Interact,0.5,,500); } function PlayWaiting() { local float decision; local float animspeed; if (Region.Zone.bWaterZone) { PlaySwimming(); return; } animspeed = 0.4 + 0.6 * FRand(); decision = FRand(); if ( AnimSequence == 'Breath2' ) { if (!bQuiet && (decision < 0.12) ) { PlaySound(Cough,Slot_Talk,1.0,,800); LoopAnim('Look', 0.85); return; } else if (decision < 0.24) { PlaySound(Sweat,Slot_Talk,0.3,,300); LoopAnim('Breath2', animspeed); return; } else if (!bQuiet && (decision < 0.34) ) { PlayAnim('Look', animspeed, 0.3); return; } } else if ( AnimSequence == 'Look' ) { if (decision < 0.3) PlayAnim('Breath2', animspeed, 0.3); else { PlayAnim('Look', animspeed); } return; } PlaySound(Breath,SLOT_Talk,0.5,true,500,animspeed * 1.5); LoopAnim('Breath2', animspeed); } function PlayPatrolStop() { PlayWaiting(); } function PlayWaitingAmbush() { if (Region.Zone.bWaterZone) { PlaySwimming(); return; } LoopAnim('Breath2', 0.4 + 0.3 * FRand()); } function PlayDive() { TweenToSwimming(0.2); } function TweenToFighter(float tweentime) { if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else TweenAnim('RightHit', tweentime); } function TweenToRunning(float tweentime) { setcollisionsize(17,39); if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if ( ((AnimSequence != 'Run') && (AnimSequence != 'RunFire')) || !bAnimLoop) { if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else TweenAnim('walk', tweentime); } } function TweenToWalking(float tweentime) { setcollisionsize(17,39); if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else if ( Weapon != None ) TweenAnim('WalkTool', tweentime); else TweenAnim('walk', tweentime); } function TweenToWaiting(float tweentime) { if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else TweenAnim('Breath2', tweentime); } function TweenToPatrolStop(float tweentime) { if (Region.Zone.bWaterZone) TweenToSwimming(tweentime); else if (AnimSequence == 'Bowing') PlayAnim('GetUp', 0.4, 0.15); else if ( IsInState('Guarding')) TweenAnim('Breath1', tweentime); else TweenAnim('Breath2', tweentime); } function PlayRunning() { setcollisionsize(17,39); if (Region.Zone.bWaterZone) { PlaySwimming(); return; } LoopAnim('walk', -1.3/GroundSpeed,,0.4); } function PlayCombatMove() { if (Region.Zone.bWaterZone) { PlaySwimming(); return; } LoopAnim('walk', -1.3/GroundSpeed,,0.4); } function PlayWalking() { setcollisionsize(17,39); if (Region.Zone.bWaterZone) { PlaySwimming(); return; } if ( Weapon != None ) LoopAnim('WalkTool', -3/GroundSpeed,,0.4); else LoopAnim('walk', -3/GroundSpeed,,0.4); } function PlayThreatening() { if (Region.Zone.bWaterZone) { PlaySwimming(); return; } Acceleration = vect(0,0,0); if (AnimSequence == 'Backup') { PlaySound(Cringe, SLOT_Talk); LoopAnim('Cringe', 0.4 + 0.7 * FRand(), 0.4); } else if (AnimSequence == 'Cringe') { if ( FRand() < 0.6 ) PlaySound(Cringe, SLOT_Talk); LoopAnim('Cringe', 0.4 + 0.7 * FRand()); } else if (AnimSequence == 'Bowing') { PlaySound(Bowing, SLOT_Talk); LoopAnim('Bowing', 0.4 + 0.7 * FRand()); } else if (FRand() < 0.4) LoopAnim('Bowing', 0.4 + 0.7 * FRand(), 0.5); else PlayRetreating(); } function PlayRetreating() { setcollisionsize(17,39); if (Region.Zone.bWaterZone) { PlaySwimming(); return; } bAvoidLedges = true; PlaySound(Backup, SLOT_Talk); DesiredRotation = Rotator(Enemy.Location - Location); DesiredSpeed = WalkingSpeed; Acceleration = AccelRate * Normal(Location - Enemy.Location); LoopAnim('Backup'); } function PlayTurning() { TweenAnim('walk', 0.3); } function PlayDying(name DamageType, vector HitLoc) { //first check for head hit if ( ((DamageType == 'Decapitated') || (HitLoc.Z - Location.Z > 0.5 * CollisionHeight)) && !Level.Game.bVeryLowGore ) { PlayHeadDeath(DamageType); return; } Super.PlayDying(DamageType, HitLoc); } function PlayHeadDeath(name DamageType) { local BigGib carc; carc = Spawn(class 'BigGib',,, Location + CollisionHeight * vect(0,0,0.8), Rotation + rot(3000,0,16384) ); if (carc != None) { carc.Mesh = mesh'NaliHead'; carc.Initfor(self); carc.Velocity = Velocity + VSize(Velocity) * VRand(); carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z); } PlaySound(sound'Death2n', SLOT_Talk, 4 * TransientSoundVolume); PlayAnim('Dead4',0.5, 0.1); } function PlayBigDeath(name DamageType) { PlaySound(Die, SLOT_Talk, 4 * TransientSoundVolume); PlayAnim('Dead5',0.7, 0.1); } function PlayLeftDeath(name DamageType) { PlaySound(sound'Death2n', SLOT_Talk, 4 * TransientSoundVolume); PlayAnim('Dead2',0.7, 0.1); } function PlayRightDeath(name DamageType) { PlaySound(Die, SLOT_Talk, 4 * TransientSoundVolume); PlayAnim('Dead3',0.7, 0.1); } function PlayGutDeath(name DamageType) { PlaySound(Die, SLOT_Talk, 4 * TransientSoundVolume); if ( FRand() < 0.5 ) PlayAnim('Dead3',0.7, 0.1); else PlayAnim('Dead2',0.7, 0.1); } function PlayLanded(float impactVel) { TweenAnim('HeadHit', 0.1); } function PlayVictoryDance() { PlaySound(Sweat, SLOT_Talk); PlayAnim('Look', 1.0, 0.1); } function ClawDamageTarget() { MeleeDamageTarget(ClawDamage, (ClawDamage * 1000.0 * Normal(Target.Location - Location))); } function PlayMeleeAttack() { local float decision; local vector X,Y,Z, projStart; GetAxes(Rotation,X,Y,Z); FireProjectile( vect(1, 0, 0.8), 900); projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; decision = FRand(); Acceleration = AccelRate * Normal(Target.Location - Location); //log("Start Melee Attack"); if ( Region.Zone.bWaterZone ) { if (AnimSequence == 'LeftHit') decision += 0.17; else if (AnimSequence == 'HeadHit') decision -= 0.17; if (decision < 0.5) PlayAnim('LeftHit'); else PlayAnim('HeadHit'); } else { if (AnimSequence == 'HeadHit') decision += 0.17; else if (AnimSequence == 'RightHit') decision -= 0.17; if (decision < 0.5) { PlayAnim('HeadHit'); spawn(RangedProjectile ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); } else { PlayAnim('RightHit'); spawn(RangedProjectile ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); } } } function bool CanFireAtEnemy() { local vector HitLocation, HitNormal, EnemyDir, projStart; local actor HitActor; local float EnemyDist; EnemyDir = Enemy.Location - Location + Enemy.CollisionHeight * vect(0,0,0.8); EnemyDist = VSize(EnemyDir); if (EnemyDist > 950) //FIXME - what is right number? return false; EnemyDir = EnemyDir/EnemyDist; projStart = Location + 0.8 * CollisionRadius * EnemyDir + 0.8 * CollisionHeight * vect(0,0,1); HitActor = Trace(HitLocation, HitNormal, projStart + (MeleeRange + Enemy.CollisionRadius) * EnemyDir, projStart, false, vect(6,6,4) ); return (HitActor == None); } function ShootTarget() { local vector X,Y,Z, projStart; GetAxes(Rotation,X,Y,Z); FireProjectile( vect(1, 0, 0.8), 900); projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; spawn(RangedProjectile ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); } function PlayRangedAttack() { local vector X,Y,Z, projStart; GetAxes(Rotation,X,Y,Z); if (Region.Zone.bWaterZone) PlayAnim('Victory1L'); else PlayAnim('Victory1'); projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; spawn(RangedProjectile ,self,'',projstart,AdjustAim(ProjectileSpeed, Location, 400, bLeadTarget, bWarnTarget)); } function PlayMovingAttack() { PlayRangedAttack(); } function PlaySwimming() { Acceleration = WaterSpeed * VRand(); Velocity = Acceleration; SetPhysics(PHYS_Falling); LoopAnim('walk', 0.5 + 0.9 * FRand()); } function TweenToSwimming(float TweenTime) { TweenAnim('walk', TweenTime); } state MeleeAttack { ignores SeePlayer, HearNoise, Bump; function PlayMeleeAttack() { if ( Region.Zone.bWaterZone && !bFirstAttack && (FRand() > 0.4 + 0.17 * skill) ) { PlayAnim('walk'); } else Global.PlayMeleeAttack(); bFirstAttack = false; } function BeginState() { Super.BeginState(); bCanStrafe = True; bFirstAttack = True; } function EndState() { Super.EndState(); bCanStrafe = false; } } state Roaming { ignores EnemyNotVisible; function PickDestination() { Super.PickDestination(); bHasWandered = true; } } state Wandering { ignores EnemyNotVisible; function PickDestination() { Super.PickDestination(); bHasWandered = true; } } o qXYBEFDibdfclass corpseGameReplicationInfo extends TournamentGameReplicationInfo; // clients need to know: var bool bGibCollect; var int Lives; var int UndeadAmount; var int MaxUndead; replication { reliable if ( Role == ROLE_Authority ) bGibCollect,Lives,UndeadAmount,MaxUndead; } e  u w 6f 4FSL$Cm$BQ$HB1PPjDA<.-r-#.pL Ti"-' >@x_ MF<bLD*pppB [SD]: hvipX"$ st} I ::$rL3.;"t//============================================================================= // CorpsePlayerReplicationInfo. //============================================================================= class CorpsePlayerReplicationInfo expands PlayerReplicationInfo; var float Frags; // Player's current frags. replication { // Things the server should send to the client. reliable if ( Role == ROLE_Authority ) Frags; }  n  i a}5//============================================================================= // UndeadPack. //============================================================================= class UndeadPack expands Mutator; // you can only have a max of 5 new Undead classes var() string NewZombie; //1st type of new Undead var() string NewKamiZombie; //2nd type of new Undead var() string NewZombieMaster; //3rd type of new Undead var() string NewGhost; //4th type of new Undead var() string NewGhoul; //5th type of new Undead var bool Initialized; function PostBeginPlay() { if (Initialized) return; Initialized = True; settimer(1,true); } simulated function Timer() { local NavigationPoint N; local CorpseGameReplicationInfo CGRI; CGRI = corpsegameReplicationInfo(Level.Game.GameReplicationInfo); foreach AllActors(class'NavigationPoint', N) { if ((CorpseMania(Level.Game).bZombieBeatDown) && (CGRI.UndeadAmount < CorpseMania(Level.Game).MaxUndead)) { if ((CorpseMania(Level.Game).AmountofUndead) == 1){ // spawns some undead if (NewZombie != "" && N.IsA('PathNode') &&frand() <0.002) { ReplaceWith(N, NewZombie); CGRI.UndeadAmount+=1; } else if (NewGhost != "" && N.IsA('PathNode') &&frand() <0.0006) { ReplaceWith(N, NewGhost); CGRI.UndeadAmount+=1; } else if (NewZombieMaster != "" && N.IsA('PathNode') &&frand() < 0.0001) { ReplaceWith(N, NewZombieMaster); CGRI.UndeadAmount+=1; } else if (NewKamiZombie != "" && N.IsA('PathNode') &&frand() < 0.00006) { ReplaceWith(N, NewKamiZombie); CGRI.UndeadAmount+=1; } else if (NewGhoul != "" && N.IsA('PathNode') &&frand() < 0.00005) { ReplaceWith(N, NewGhoul); CGRI.UndeadAmount+=1; } else; } if ((CorpseMania(Level.Game).AmountofUndead) == 2){ // spawns normal amount of undead if (NewZombie != "" && N.IsA('PathNode') &&frand() <0.01) { ReplaceWith(N, NewZombie); CGRI.UndeadAmount+=1; } else if (NewGhost != "" && N.IsA('PathNode') &&frand() <0.0015) { ReplaceWith(N, NewGhost); CGRI.UndeadAmount+=1; } else if (NewZombieMaster != "" && N.IsA('PathNode') &&frand() < 0.0008) { ReplaceWith(N, NewZombieMaster); CGRI.UndeadAmount+=1; } else if (NewKamiZombie != "" && N.IsA('PathNode') &&frand() < 0.0004) { ReplaceWith(N, NewKamiZombie); CGRI.UndeadAmount+=1; } else if (NewGhoul != "" && N.IsA('PathNode') &&frand() < 0.0003) { ReplaceWith(N, NewGhoul); CGRI.UndeadAmount+=1; } else; } if ((CorpseMania(Level.Game).AmountofUndead) == 3){ // spawns a shitload of undead if (NewZombie != "" && N.IsA('PathNode') &&frand() <0.08) { ReplaceWith(N, NewZombie); CGRI.UndeadAmount+=1; } else if (NewGhost != "" && N.IsA('PathNode') &&frand() <0.02) { ReplaceWith(N, NewGhost); CGRI.UndeadAmount+=1; } else if (NewZombieMaster != "" && N.IsA('PathNode') &&frand() < 0.01) { ReplaceWith(N, NewZombieMaster); CGRI.UndeadAmount+=1; } else if (NewKamiZombie != "" && N.IsA('PathNode') &&frand() < 0.006) { ReplaceWith(N, NewKamiZombie); CGRI.UndeadAmount+=1; } else if (NewGhoul != "" && N.IsA('PathNode') &&frand() < 0.005) { ReplaceWith(N, NewGhoul); CGRI.UndeadAmount+=1; } else; } } } } {={ //============================================================================= // UMenuUndeadPackInclude. //============================================================================= class UMenuUndeadPackInclude expands UMenuUndeadPackListBox; var() bool bCanDrag; var() bool bCanDragExternal; var() bool bAcceptExternalDragDrop; function bool ExternalDragOver(UWindowDialogControl ExternalControl, float X, float Y) { if(ExternalControl.OwnerWindow != OwnerWindow || UMenuMutatorExclude(ExternalControl) == None) return False; return Super.ExternalDragOver(ExternalControl, X, Y); } function ReceiveDoubleClickItem(UWindowListBox L, UWindowListBoxItem I) { Super.ReceiveDoubleClickItem(L, I); MakeSelectedVisible(); } w@U@ux3% Vd HQO e#HaAB,6- a!ff > ] jG//============================================================================= // UMenuUndeadPackCW. //============================================================================= class UMenuUndeadPackCW expands UMenuDialogClientWindow; var UMenuBotmatchClientWindow BotmatchParent; var UWindowHSplitter Splitter; var UMenuUndeadPackExclude Exclude; var UMenuUndeadPackInclude Include; var() localized string ExcludeCaption; var() localized string ExcludeHelp; var() localized string IncludeCaption; var() localized string IncludeHelp; var UWindowCheckbox KeepCheck; var() localized string KeepText; var() localized string KeepHelp; var UMenuUndeadPackFrameCW FrameExclude; var UMenuUndeadPackFrameCW FrameInclude; var() string MutatorBaseClass; function Created() { Super.Created(); BotmatchParent = UMenuBotmatchClientWindow(OwnerWindow); KeepCheck = UWindowCheckbox(CreateControl(class'UWindowCheckbox', 10, 2, 190, 1)); KeepCheck.SetText(KeepText); KeepCheck.SetHelpText(KeepHelp); KeepCheck.SetFont(F_Normal); KeepCheck.bChecked = BotmatchParent.bKeepMutators; KeepCheck.Align = TA_Right; Splitter = UWindowHSplitter(CreateWindow(class'UWindowHSplitter', 0, 0, WinWidth, WinHeight)); FrameExclude = UMenuUndeadPackFrameCW(Splitter.CreateWindow(class'UMenuUndeadPackFrameCW', 0, 0, 100, 100)); FrameInclude = UMenuUndeadPackFrameCW(Splitter.CreateWindow(class'UMenuUndeadPackFrameCW', 0, 0, 100, 100)); Splitter.LeftClientWindow = FrameExclude; Splitter.RightClientWindow = FrameInclude; Exclude = UMenuUndeadPackExclude(CreateWindow(class'UMenuUndeadPackExclude', 0, 0, 100, 100, Self)); FrameExclude.Frame.SetFrame(Exclude); Include = UMenuUndeadPackInclude(CreateWindow(class'UMenuUndeadPackInclude', 0, 0, 100, 100, Self)); FrameInclude.Frame.SetFrame(Include); Exclude.Register(Self); Include.Register(Self); Exclude.SetHelpText(ExcludeHelp); Include.SetHelpText(IncludeHelp); Include.DoubleClickList = Exclude; Exclude.DoubleClickList = Include; Splitter.bSizable = False; Splitter.bRightGrow = True; Splitter.SplitPos = WinWidth/2; LoadMutators(); } function Paint(Canvas C, float X, float Y) { Super.Paint(C, X, Y); DrawUpBevel( C, 0, 20, WinWidth, 15, GetLookAndFeelTexture()); C.Font = Root.Fonts[F_Normal]; C.DrawColor.R = 0; C.DrawColor.G = 0; C.DrawColor.B = 0; ClipText(C, 10, 23, ExcludeCaption, True); ClipText(C, WinWidth/2 + 10, 23, IncludeCaption, True); } function Resized() { Super.Resized(); Splitter.WinTop = 35; Splitter.SetSize(WinWidth, WinHeight-35); Splitter.SplitPos = WinWidth/2; } function LoadMutators() { local int NumMutatorClasses; local string NextMutator, NextDesc; local UMenuMutatorList I; local string MutatorList; local int j; local int k; GetPlayerOwner().GetNextIntDesc(MutatorBaseClass, 0, NextMutator, NextDesc); while( (NextMutator != "") && (NumMutatorClasses < 200) ) { I = UMenuMutatorList(Exclude.Items.Append(class'UMenuMutatorList')); I.MutatorClass = NextMutator; k = InStr(NextDesc, ","); if(k == -1) { I.MutatorName = NextDesc; I.HelpText = ""; } else { I.MutatorName = Left(NextDesc, k); I.HelpText = Mid(NextDesc, k+1); } NumMutatorClasses++; GetPlayerOwner().GetNextIntDesc(MutatorBaseClass, NumMutatorClasses, NextMutator, NextDesc); } MutatorList = BotmatchParent.MutatorList; while(MutatorList != "") { j = InStr(MutatorList, ","); if(j == -1) { NextMutator = MutatorList; MutatorList = ""; } else { NextMutator = Left(MutatorList, j); MutatorList = Mid(MutatorList, j+1); } I = UMenuMutatorList(Exclude.Items).FindMutator(NextMutator); if(I != None) { I.Remove(); Include.Items.AppendItem(I); } else Log("Unknown UndeadPack in UndeadPack list: "$NextMutator); } Exclude.Sort(); } function SaveConfigs() { local UMenuMutatorList I; local string MutatorList; Super.SaveConfigs(); for(I = UMenuMutatorList(Include.Items.Next); I != None; I = UMenuMutatorList(I.Next)) { if(MutatorList == "") MutatorList = I.MutatorClass; else MutatorList = MutatorList $ "," $I.MutatorClass; } BotmatchParent.MutatorList = MutatorList; } function Notify(UWindowDialogControl C, byte E) { Super.Notify(C, E); switch(E) { case DE_Change: switch(C) { case KeepCheck: BotmatchParent.bKeepMutators = KeepCheck.bChecked; break; } break; } } Yh //============================================================================= // UMenuUndeadPackFrameCW. //============================================================================= class UMenuUndeadPackFrameCW expands UMenuDialogClientWindow; var UWindowControlFrame Frame; function Created() { Frame = UWindowControlFrame(CreateWindow(class'UWindowControlFrame', 0, 0, WinWidth, WinHeight)); Super.Created(); } function BeforePaint(Canvas C, float X, float Y) { Super.BeforePaint(C, X, Y); Frame.WinLeft = 5; Frame.WinTop = 5; Frame.SetSize(WinWidth - 10, WinHeight - 10); } Mx//============================================================================= // UMenuUndeadPackWindow. //============================================================================= class UMenuUndeadPackWindow expands UWindowFramedWindow; var UWindowSmallCloseButton CloseButton; var() class ClientClass; var() localized string WindowTitle; function Created() { bStatusBar = False; bSizable = True; Super.Created(); WinWidth = Min(400, Root.WinWidth - 50); WinHeight = Min(210, Root.WinHeight - 50); WinLeft = Root.WinWidth/2 - WinWidth/2; WinTop = Root.WinHeight/2 - WinHeight/2; CloseButton = UWindowSmallCloseButton(CreateWindow(class'UWindowSmallCloseButton', WinWidth-56, WinHeight-24, 48, 16)); MinWinWidth = 200; } function Resized() { Super.Resized(); ClientArea.SetSize(ClientArea.WinWidth, ClientArea.WinHeight-24); CloseButton.WinLeft = ClientArea.WinLeft+ClientArea.WinWidth-52; CloseButton.WinTop = ClientArea.WinTop+ClientArea.WinHeight+4; } function Paint(Canvas C, float X, float Y) { local Texture T; T = GetLookAndFeelTexture(); DrawUpBevel( C, ClientArea.WinLeft, ClientArea.WinTop + ClientArea.WinHeight, ClientArea.WinWidth, 24, T); Super.Paint(C, X, Y); } VK -(-'?D?,2?,D?,2?,?,?,?,V. ?,8?,@BAHC H|+'?,V?,4V?, w//============================================================================= // NoWeapons. //============================================================================= class NoWeapons expands Mutator; function bool CheckReplacement(Actor Other, out byte bSuperRelevant) { if ( Other.IsA('weapon') || Other.IsA('HealthPack') || Other.IsA('UT_Shieldbelt') || Other.IsA('UT_Invisibility') || Other.IsA('UDamage') || Other.IsA('HealthVial') ) return false; return true; } LV@VK 92.  {w @@;RN Ao$ PK$P.H.  A@>C?H OH  qH%H-P-H$4. j.,4 ,BBG.,4 ,BB4j4G?. BBj H?M. BBG HM?BMB?  VM  SM??M4-(4-'4?,T T_Bo$ "Al h}aAB,6- -'ae$P  a!S p |U S4 B4?,#4?, $a //============================================================================= // UMenuUndeadPackExclude. //============================================================================= class UMenuUndeadPackExclude expands UMenuUndeadPackListBox; var() bool bCanDragExternal; var() bool bAcceptExternalDragDrop; function bool ExternalDragOver(UWindowDialogControl ExternalControl, float X, float Y) { if(ExternalControl.OwnerWindow != OwnerWindow || UMenuMutatorInclude(ExternalControl) == None) return False; if(Super.ExternalDragOver(ExternalControl, X, Y)) { Sort(); return True; } return False; } function ReceiveDoubleClickItem(UWindowListBox L, UWindowListBoxItem I) { Super.ReceiveDoubleClickItem(L, I); Sort(); MakeSelectedVisible(); } B //============================================================================= // UMenuUndeadPackListBox. //============================================================================= class UMenuUndeadPackListBox expands UWindowListBox; var() float ItemHeight; var() class ListClass; function DrawItem(Canvas C, UWindowList Item, float X, float Y, float W, float H) { if(UMenuMutatorList(Item).bSelected) { C.DrawColor.r = 0; C.DrawColor.g = 200; C.DrawColor.b = 128; DrawStretchedTexture(C, X, Y, W, H-1, Texture'WhiteTexture'); C.DrawColor.r = 255; C.DrawColor.g = 255; C.DrawColor.b = 255; } else { C.DrawColor.r = 0; C.DrawColor.g = 0; C.DrawColor.b = 0; } C.Font = Root.Fonts[F_Normal]; ClipText(C, X+2, Y, UMenuMutatorList(Item).MutatorName); } ^Nt XNXaUUu/vH//============================================================================= // CorpseScoreBoard. //============================================================================= class CorpseScoreBoard expands TournamentScoreBoard; var() localized string VictoryGoal; function DrawCategoryHeaders(Canvas Canvas) { local float Offset, XL, YL; local PlayerReplicationInfo PRI; local TournamentGameReplicationInfo TGRI; local CorpseGameReplicationInfo CGRI; PRI = PlayerPawn(Owner).PlayerReplicationInfo; TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); CGRI = CorpseGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); Offset = Canvas.CurY; Canvas.DrawColor = WhiteColor; Canvas.StrLen(PlayerString, XL, YL); Canvas.SetPos((Canvas.ClipX / 8)*2 - XL/2, Offset); Canvas.DrawText(PlayerString); if ( PRI.bAdmin ){ if (TGRI.TimeLimit > 0){ Canvas.StrLen("Amt /", XL, YL); Canvas.SetPos((Canvas.ClipX / 8)*3.65 - XL/2, Offset); Canvas.DrawText("Amt /"); Canvas.StrLen("Max", XL, YL); Canvas.SetPos((Canvas.ClipX / 8)*4.1 - XL/2, Offset); Canvas.DrawText("Max"); } } if (TGRI.TimeLimit > 0){ Canvas.StrLen("Frags", XL, YL); Canvas.SetPos((Canvas.ClipX / 8)*5 - XL/2, Offset); Canvas.DrawText("Frags"); } if (CGRI.bgibcollect == true){ Canvas.StrLen("Gibs", XL, YL); Canvas.SetPos((Canvas.ClipX / 8)*6 - XL/2, Offset); Canvas.DrawText("Gibs"); } else{ Canvas.StrLen("Lives", XL, YL); Canvas.SetPos((Canvas.ClipX / 8)*6 - XL/2, Offset); Canvas.DrawText("Lives"); } if (Level.NetMode != NM_StandAlone) { Canvas.StrLen(PingString, XL, YL); Canvas.SetPos((Canvas.ClipX / 8)*7 - XL/2, Offset); Canvas.DrawText(PingString); } } function DrawNameAndPing(Canvas Canvas, PlayerReplicationInfo PRI, float XOffset, float YOffset) { local float XL, YL, XL2; local Font CanvasFont; local TournamentGameReplicationInfo TGRI; local CorpseGameReplicationInfo CGRI; TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); CGRI = CorpseGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); // draw a gold * for local player Canvas.SetPos((Canvas.ClipX / 8) * 1.4, YOffset); if (PRI.PlayerName == Pawn(Owner).PlayerReplicationInfo.PlayerName){ Canvas.DrawColor = WhiteColor; Canvas.DrawText("*", False); } // Draw Name Canvas.SetPos((Canvas.ClipX / 8) * 1.5, YOffset); // draw name colors in zombiebeatdown if (TGRI.TimeLimit > 0){ if ( PRI.bAdmin ) Canvas.DrawColor = WhiteColor; else if (PRI.Team == 0) Canvas.DrawColor = RedColor; else if (PRI.Team == 1) Canvas.DrawColor = BlueColor; else if (PRI.Team == 2) Canvas.DrawColor = GreenColor; else if (PRI.Team == 3) Canvas.DrawColor = GoldColor; else Canvas.DrawColor = LightCyanColor; } // draw name colors in deathmatch else{ if ( PRI.bAdmin ) Canvas.DrawColor = WhiteColor; else Canvas.DrawColor = LightCyanColor; } Canvas.DrawText(PRI.PlayerName, False); Canvas.StrLen( "0000", XL, YL ); if ( PRI.bAdmin ){ // Draw MaxUndead if (TGRI.TimeLimit > 0){ Canvas.DrawColor = RedColor; Canvas.StrLen( (CGRI.MaxUndead), XL2, YL ); Canvas.SetPos( (Canvas.ClipX / 8) * 4 + XL/2 - XL2, YOffset ); Canvas.DrawText( (CGRI.MaxUndead), false ); // Draw UndeadAmount Canvas.DrawColor = RedColor; Canvas.StrLen( (CGRI.UndeadAmount$" /"), XL2, YL ); Canvas.SetPos( (Canvas.ClipX / 8) * 3.65 + XL/2 - XL2, YOffset ); Canvas.DrawText( (CGRI.UndeadAmount$" /"), false ); } } // Draw Frags if (TGRI.TimeLimit > 0){ Canvas.DrawColor = RedColor; Canvas.StrLen( int(PRI.Deaths), XL2, YL ); Canvas.SetPos( (Canvas.ClipX / 8) * 5 + XL/2 - XL2, YOffset ); Canvas.DrawText( int(PRI.Deaths), false ); } // Draw Lives if ( PRI.Score < 1 ) Canvas.DrawColor = GreenColor; else Canvas.DrawColor = GoldColor; Canvas.StrLen( int(PRI.Score), XL2, YL ); Canvas.SetPos( (Canvas.ClipX / 8) * 6 + XL/2 - XL2, YOffset ); Canvas.DrawText( int(PRI.Score), false ); if (Level.NetMode != NM_Standalone) { // Draw Ping Canvas.DrawColor = LightCyanColor; Canvas.StrLen( PRI.Ping, XL2, YL ); Canvas.SetPos( (Canvas.ClipX / 8) * 7 + XL/2 - XL2, YOffset ); Canvas.DrawText( PRI.Ping, false ); } } function DrawVictoryConditions(Canvas Canvas) { local TournamentGameReplicationInfo TGRI; local int Hours, Minutes, Seconds; TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo); if ( TGRI == None ) return; Canvas.DrawText("Corpse Mania"); } aG g \ //============================================================================= // OneShotKills. //============================================================================= class OneShotKills expands Mutator; function MutatorTakeDamage( out int ActualDamage, Pawn Victim, Pawn InstigatedBy, out Vector HitLocation, out Vector Momentum, name DamageType) { local vector Mo; local int i; if ( NextDamageMutator != None) NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType ); if (Victim.IsA('Zombie')) Victim.Health -= 100; else if (Victim.IsA('KamiZombie')) Victim.Health -= 100; else if (Victim.IsA('ZombieMaster')) Victim.Health -= 200; else if (Victim.IsA('Ghost')) Victim.Health -= 100; else if (Victim.IsA('Ghoul')) Victim.Health -= 150; } ||{j |'{v |{b |~{A|4{J{I {{~{T {i {o{@{{{wGN Dp{l{^ {U {G{D {K{M{G Jd {F{m JI {k GO{j{m {-{LJq H|{R IaLe JR DM Gm {k{ KMKlLy {~{p{z GXNPGg {o|fMIKD K)KA {DKFJK {I{V {v{t{L D?{BNc Jn J| K9KF{f KP Nv {M{N{C |Q GC{r Lk{K LO DC{BK@ JrAK ArLX J[Jo Jh{uJ^{sLs KL{l{r{J BQBOJK {@KL{mJ`J] {AJdNy|EM~ {M F]K^Kj {zH^J`L_ {u Kg KZK:Ka {N LTG^ Mq s@ NEGULE NAAbwgcMV |J LAV |W |_ JM{I{nGZKNJUy Jc|h Mq JG KcKR{K{j Lh Jp KI {C KMAU |Qv|tKZ KuJX LxJW whI {mFg JBJh |b {iMA{v@j M` M_ {~NC Lj Mp L\ KmGE Nr KrKO |D N Mr v5f vC NSMXAELr FSGO LkNzKb JJHA[{qAwPL@ Jo L^L` BR{W KSA~I`NGN@KoMaAKJy HeMM Lf{a{L L\ LlLNLlFB AcK] Na FB LlGn A{| Gs vD vF BVJRBK{Tvko Kn{QJc Ka vRxvL JN{HvFs AUBTKG AfA}B?~J1J0A6KQ AcKlKYAY K{ AdJU LdA|AwAxA\A%qA_AbA}A@JuJoJ\JRFCpJmKrAKAJjAqACAgAKAdKAQAWNLAF Ae{f NFJx A]M~AiK[ LKLA JtA!ATLVA}A[A JcAtA/JqKYA~KQA]A.AeLe F_ A|ApAKAcAqAlA!A GN ADA LiA6AnJZ JjA AfAeAjvkU {U AkF{ Gk {} A!{n Fz AfJqA |o sH AYpA!Ae{~ vFt |J AnANFt KkAPLVAlvK vY AVA {Bv_L v_J Fc vbL{ AW{GwA v_G Jt sF weS {D |W w[ vJ K%S L{AJRsI v_K Ju {d {l KIANwGAdwhP K@ Lf Fb KIwhR L L~ {y LYHdWAwyvE vl sB L{LCxAxA`K%| Auvb v?T |g LNOAFLw Hd[Ju AhJv {} At{K Jw GhHY Nl KF {FNIAHAnMsM` LO AsAMHgIH AJA@LDLeAQATLH KZLLY Kq Lf{i Mg{CKr ANJWLHL} A[ACvkV AIArLdA_ALAHANA_vkn AX{JAWAtJZ LMA}AKAkAAkIk APLs |z |_ {EJw\AXI~AgKL LgA J_ Le |Z Fw FV AAJbLnAOAELPLoLA AAiA]A/\Gl NIAbA!ATAAaLW AyLQLvH{{^ AAAdJ^F_ LJFpFn{c {wvRyK` vRw$DQdo$bh>VJWX.X  g;$@ t2b  t5i  A@i  NAb [.t iKv T DF{RI `i l5X  {SHGT  VmN$wcOZXhL{vl DPb QmX${_.{  Z>Wg5z uj$HB@z JT{Wy e2VsV AFS NG{ [>X  hAS uuBUXP^Y^$j lz$zV_{Paq ^cR lGyEG@U'Pc@  qcQ ~X LGo Yl{ffB tHB2a P5q ]jX  k+m  x| En{S {a>U pJ|oX JN Xfz  eLX r@ @z Ns{ ]~ jX w} D{ Rpq _P|  mG zAs Gt{ Sfb `qq mwo  {c  HUr Tq  b{o2~  }T  J|YW(X  eS  rS  ~n  K{XB  fAQ snm @o  MT  Z^  g$DtY xc  ES  QB ^{l:] zco GTB  Tfa aPP mE z|B  I\ U2Q c~b oTx  }\ J:` X2S e:a r:^ ,q L:_ ZPF  gTy s` Awp  MuS  Z}B  f-sS  Az  NLa ZTh  gu  tl AS  N{[q  iwE  v_ C_yPp  ^2z kF  xl Dwe Qh ^+k  kLz x[z G+cqT+E$lEnj qH ~rS  K+3Xrc  g+>$\sSG O+` ^E  mu  zE GCS  T\  acmU$\|fx  XT(dXLM ZfC g t+F @e M!,Z=G Fd  U2`bCc  p1T |D I$]U+ YrZ K_WnVez sz _K^  Yk  e rr @z N+<$^Zz xLw DZ  Plo ][  ju  ve  Ck  OR \qkC zyfGA`V]S  ds p O  }Gz J r VR dSr qJe  \K[  Ym] efA  shS  @Nn  Mr ZUF  hr  uow  B~ O`O  ]j{jY xj\  E]z QWu ^+/Jlu vS DOk  QNo  ^] kp  yDr  Fy  SN  `nt m~m  zU\ G8u T+mCbC  eU rL 0qLu [d i[  w-O  Cb$BP+h R=r _u  mRMz8vG+K-}Xju  BoWOQ ]s  iD v8h D]  Ra _Ou mD {3Q I6m V9X  d<\ qz z K]'Wht ~8t LE\ ZqA hQ uLW  Bl[ NqS Zz g+ shD BQY PWt ^q lj{YY I:r  WVcu r[ wn  KOh Xmx ft tu  B~` Oer  \D iLw{ Fkz R+gu^zz S{ _D lLy zu G_T+Q{bNe ]i  jat  w+l Du  SzQ `c mt zx H+eSVD ihh wAz EX  Rt _am  mq zm_HU] Vt cAVq]'jfhu tu  Bt OD ]@ kz x+SD{SWh a\ o}$B}\ `L\ Zk ht uWD CP  Qu ^+mkak zP  IT  Vq c~ ^rt PM  ^+_GkOurD @r  N{[z i8D u&$\ CU$H0_p$tgx$w [+WnR+HI@OD I$mfW+_`D+.zd*m  ^t  jwm  wm DL R__QhmZ {_ IiC V^x cv{pm  ~{ Km X^B  f+C!s_T/B ba p {}Np  K=_X} fT sm @dx  N+}Y[iZ tC B] Ob \+LAi+T-jz Wm cpt  qr ~Z Jwq WNE  el rOt pm  MN Yh hxvPt  E+WARhm Sm ack  mK y`{Ex} SvX  `I_mH  {q} Hb U} clk  pX }v J8m Wt e+\|qi{maY  {E H+hATwt  Ud_b-{p] ~d L?x Xie+[Fs\_ y6t EWm SXS  aVz mPm  yB Fm SOm a+&o+c!Ut  v+b5BN  wM{DKz Rz ^^njIx  y{$KFS_Qi_hm+V-{+NAh+YiB_ BC N?B  [$Ph| xpE;z SE _+t`m7z M+NFY| _4z l+hBxk z'k  I/p V'iem sg A(WM^[ [0t  hC uag  B+GN'I  U+d(as IW V0m  c*t  p)B }'jK^ Y+k)fYhOm ]t  kqQ xm  E'Q RO  `6D  m*q zZ HD T}_  a+K&n)p T~ cbrRp{{BE-},ffjePPKA`M8waHMXE1e~YVjdoFuS,lEH}BM cOe_r(QmEyH5~*$a sW(T[;|i@nwtpePAU: `VJN vfD.fjLiRiP[;yTy tnW mO-DZ6KqHNf|Q4bpBVZn7Xd}O]c`LoR lReu~Q-s@n`ySN=vac&Wq/K}XbHZeujQ-_ eL@Gq}`xW]X~VuMi8wKR~By$@llR6KkGEvTF{~-AcenRn7SghmJz_Fwc`}fa]vq~sCoq}rkMo\r|OiOnOO}NLR;Zfa U\3v V$Zi {lEC AYH QYa YVz VCP ~OS  qb J.|S GTO yic ~ yL O-E Nfr y$eX 6E} ~ SB tpU R?E ]D Ky C e~| GQ{z FHIu +ar~ f}Yp i6EI @$QN PN_ ]cqm IL^ i[;j g~e GQ{c +tJ^ NTh KW| [{S A$nN EWn| O7j I_`a q/JA paK _Hl pNt CLB z_GN iGEU mDZ AH^ yqlf LRiR fa{ dK\ sYg q[@ :i6[ +W0Q JA w4rO x\ A iv 4wf  ~ k  J f  V 2_c v 4j9r @gu\ |  Q P ^ y:j R_d E4yC } | dc!I e j Y[Fx dK&~ cf  d T p QeY} ~NFV @g3\ M\|O Od(K k  s +p @ kLAM k  N rNAZ k  [ {WAg k  h |t`t k  T Wk)` g I fb5U QhBJ +i L f  Y +q f c_s xi R mT` q/Zt [C!N MHo T,w NK-c w ^P v!,n oT(Z qV-B ` ]'o lT-V ] ]'C [hj {4Rb4G1QE} X[ eEi sEe AEf  O4A [F\<} jv:w<i q<e <f  M+xY.T  h.f  uv 4QAUh Rs:`y4AZ>4[@[+|vP3EwTxNK-Lw( ^yv(!*Wo(T(Ax id w4jE=w  ok  |v 4wIHv 4{P  zQ  GWTc cu;qb;lkJgx`q^f  Qf ^r$lc*P[*zmc dmd rm[ @mjN^X  \e@igPid3yhk  lhiy]uG]o UbGbtNi_f  wA D2}  Pf  ] Xj/\B{^To {TQ HTiVTjdTk  rz{~{!#L,o\o L\Q Y\ig\ju\k  C3{O,!#]J@@d@eo ]eQ jeixejFek  Tf  `A;l+P g+PvTES^Swt  qO1}rf  nMi zws  GQiTqC }Z "JZ!HlHn#tz{Wzi eH krH!b]Hq@w  ii LNs  Y<4OfR "uR!HWn#_{Bi P k]!bHq@j 7jv 4{aX\v jR xQ FS T4Ib+P k X  xTf  ETw  RTV_TX mqw {}f J9f XSw  fvf  sof  oULoB  ZoV gv 4qsg d+zpw$|+M {DCJ+i(M+T uYAM^Of  mjz+X"Hf ja x}$bF}4h[g+su*4H6De LX4F Zi `G nf  {f  G0f  Sx'_Ff Fi TS  bQeSo{  B&4uGOz4s D]wV4CEyKIHy|PQ@4Bay[cyO sf  @,K?LNt  Keo WqB dz qP}A#KKtn_#bAhCE|VHN4l ^U4M Jf  WJcMqI I LvYtgf wv 4AIEx  FqO S'L`'B  ny4g z[Public] Object=(Name=CorpseMania.CorpseMania,Class=Class,MetaClass=Botpack.TournamentGameInfo) Object=(Name=CorpseMania.OneShotKills,Class=Class,MetaClass=Engine.Mutator,Description="OneShotKills") -----====CORPSEMANIA=====----- v1.05 ------------- Installation: ------------- 1. run corpsemania.umod and follow the instructions. 2. make sure "CorpseMania" is in your server packages if you are going to start a server. ----------- Game Modes: ----------- 1. DeathMatch: This game mode is like Last Man Standing but with a twist. Everyone has a set amount of lives and when your lives run out you become an immortal zombie(walk slowly, can only throw gibs, glow green, etc.). As an immortal zombie you have to try to kill the other players that aren't zombies. The last player that's not a zombie wins. 2. ZombieBeatDown: The Undead are rising from the ground for vengence against the living and there's only one thing to do, grab your chainsaw. In this game mode all of the players are on the same side with a set amount of lives and a time limit. You have to try to survive for the time limit without losing all of your lives. Hard to do considering that everywhere you look there are Undead coming out of the ground. As long as one player is still alive everyone wins. * You can also be on 4 different squads or not be on anyones squad. You can select your squad color the same way you do in ctf(by going into player setup and changing your team color). No matter what squad you are on though everyone is still on the same side in ZombieBeatDown. 3. GibCollect: Everyone is becoming a Zombie and there's only one way to stop it, eat the most gibs. The only way to score points in GibCollect is to collect gibs. Whoever collects the set amount of gibs first and then kills another player wins. -------------- Extra Options: -------------- 1. Lives: Sets how many Lives you have. 2. Gibs: Sets how many Gibs you have to collect in GibCollect. 3. Time Limit: How long you have to survive for in the ZombieBeatDown game mode. 4. Rate of Undead: Sets how fast the Undead spawn in the ZombieBeatDown game mode. 5. Amount of Gibs: Sets how many gibs spawn when people die. 6. Ai Zombies: Check if you want Ai Zombies to spawn out of player carcasses. 7. DarkMode: Dims the lights down on the map and makes it dark. 8. ExessiveMode: Changes some of the skins and makes random events(exploding bodies, random grenades, more kamizombies, etc.). 9. ChainSawMode: Takes all of the weapons out of the level and makes everyone only have a chainsaw. 10. Max Undead: Sets the max amount of Undead that can spawn in the ZombieBeatDown game mode. ---------------- Types Of Undead: ---------------- 1. Zombie: These are your everyday gib throwing, not very bright, slow moving zombies 2. KamiZombie: These are your everyday self-destructing, slightly faster then normal zombies. 3. ZombieMaster: This type of zombie is bigger then a normal zombie and has more life. If you see one of these make sure you kill it fast because everytime one of his thrown gibs hits the ground a zombie will spawn there. 4. Ghost: This Undead is transperant, shoots blue tazers, and flys around the level looking for the living. 5. Ghoul: These are the general Undead bigbosses. They throw fireballs and if you get too close to them they will punch/throw you away. ------------ UndeadPacks: ------------ UndeadPacks are mutators specially made for CorpseMania that replace the original Undead with anything from Skaarj to Grenades. You can mix and match UndeadPacks and load up as many as you want as a time. For instructions on how to install and make your own UndeadPacks load up the UndeadPacks.txt file that came with CorpseMania.zip. ---------------------------- Fixes and Additions for 1.04a ---------------------------- *Removed having to wait for next game. created by: HOB http://www.planetunreal.com/HOB/BMq6(TRl  !!!!!!!!!!!!!!!!!!))))))!)!!)11919919!1!1BBB!9J!BJJ)!)&!!1!)1)!)))))!1))1!!9)9!)9))9!!B!)B!!J%%J3&3)6.)11!55)19 >4"F9))B))J!1B!1J)1B)1J'?F&OB1)11)91)B1)J11111911B11J91191991B91J19119919B19J9915B19991B99B999B1BB9BB99JB9J1BJBBB1JB1RB9JBDLBV!R!Z`)T!!c)!c)c))R)1R))Z1)Z%1Z!)c))c!1c9BJ11R91R19R99R)BR1BR9BR)9Z)1c11Z19Z91Z1BZ99Z==Zm))k1)k)1k-5c11k)9k91c19c19k99c99k1Bc1Bk9Bc9Bk u))s)1s11s)9s19s99s1Bs %{--{11{59{&&3?36195JJ1JRBBJBBR5JVBBZ9JZ1Jc)RJ3RPBJJBJR1XN6]O9RZ=]TBBcJBJJBRBJZJJJJJRJJZBRZJRJJRRRRRNRZFZZFgZRZZZZZ1Rc1Nk9Jc=JgBBkBJkJJcJJk9Rc?Rh>WeAcdRVcOTkX`eOpc9Bs6GuBBsBJs5H?F7G;I;PuNJ{IUuSnn?V>SVlXnşrdrrddEdEEE%%%   %           %EErrr{ÔŔЪЫ䥙򫫞g䥥П{{rrdddEE%%%%%%%   %%       EEdEr֟䫫䫥򻸸竳{{{{{rrdEEE%%%%%%  %%  %% %    %% Edrd{{Ъ򶶶򻳶䫡򶻶{{{{drrrdrdEEE%%  %        %Eddddr{{uxß򶳶򶶶򻳶䥳Ъ{{{{{{rdE%%%%%%%%      %%%%EEr{{{{{r{{{drdddGeKGKffgÔx䫶䥱򶫳ЪYggxurdeeGEdE%%%%%   %%%EE%%E%% !-GBexuxxЫЪЪşşYXXKKKG-%%%   %EdrueffxşşЪЪ䥚XLgxgxxggXHH44+  %%-BBXXLYYYg䫥ОЧxxxxxffugfXKKB+!  4BHHYYgggŪ䫎ФYЫXLXHfBBGHB--B+  (/45HLXONO䥫YŞxfXXgLHB-BKG--+!!  (+HBHHXgO䫫ЪПgş䪪ПggYfXH4BB----%!!  ++BBHXggКgxKfuueGGGG%% Kg-F +-BBGfxxxŞ枞gşxXBBBGE% + nfC%fj %-GGBGKeuxgfgŔguŞgKBG+!   r EEEEEEeuuuxxxfG-!  je-uyxK %%%EGEereu{uuueGE eGxGuku$,CM]]\\   %%%Edeuux{{u{{urdE%   uxK-zƮK %de{xxr{{{rr{{{rrrddE% e E % EmSfxx wG EdEe%%EdEEEEEEE%% %%emmmmmdG-%%%Ge%%Gː -nGe %%Edd$-E% eS %%G{u{%% %!e%umuuurrwruueuuuuxxxxnGxK%u` EddlttldddEe 7YH Edr{{  eE ux%-n~wuunrunffG%-fGu E %eiirpddd% UĐ-MY! %Eddr{  `ue fdwm enxonxxxxEwE    %EGemggG ur %egerri`m񯨉+ %%Eddd{{ledd %ӗnSrxxwxum%unuxxxueirmrrrugxxÐrr nemeffounS$H %%Eddr{{{rrr{rdqrr%GG%% uxgggwurefxxonnurrmuwuuuro!u媔!!rffnxJ %E%%EddEdrr dd~eÐe-xy-EreiufooG jmmoxxu{wuw{fŗxuuxf!GgoKnM %%%E%%dhrur duu%!rrwuunfnwno!fungxouwwwwmxkku-ex fxf-]z  %riijo-%{uuu%duuxxxgxnnnGKxuuwourEeuufxf %% uxofĐ\unoxieffmr-uyÐuEuukxxofnnu %muuonfgxuu%fuxkewEnxo%vw%$ogxufud G -GEneefxuw fnnurerrru$%w{ noS,znĝƖXford{×xU effemnuuwr xxxfmmuurw{Eduuuf-Gww$!o -ĖĝmėQQ|s -oxkuuurru{{xefxeemuuuwwnr dxnuufuuuxxnuuuffuu䟞eBxug!!v|, A xoxe Eunuuw×BGnmmmmmrrrrr%GxfggnxxxnnfxxoŔu!Ggnk\񷬝 $vzz!AVCxe %GuxxKG%fommmrldddddE-xfggxxxg !!-Kf擓K-! ug ǝ$  fx E!Gxxxurmnnnmmmmd dmnxxfemeen ux-!u{xgx zĝ !E@WRQKxxfCGSmuxxufnuxuxxuu%ddmw{uuneefkf-xKExxxdUvvzz $㯮ARennU% %u -uxnnnuwuwweSuurerrrmmrmmnnuGKKBExÐЯxdSƖvzzzzĬ K-RS eowG- %nxxuuuwwwuuurenrruue %ruu{xouS Ɨzvz񭭭Ym@ v-ouu- fouumrw{uunuuGGmenogxxx%Czvz] QfÐnuud efoxwwwuue% wuxx!ÖǬ R$AsCxggumruEGxnuuud$ueux -$#}xxun wxx㮟ÔxuwSgfmgoxeBw~-VR | xoxfeef uoŞouuuS!uŔxo v|C @W__AWs gxxj-Րrxonnggxonuuwud GuuuxxÐx%z% wĖU$}}}_-uunnu muwwzgnonuuxn$GÔxfuw{weSz!EzzC}R_WWsn{{{mx%!uuunogg䪔xxxfK$r{{u˗uz! mz-|#___} x{u{{{%%uunugfffffffeffefonnuunuxxxnxxu{t{՗%ƖS- Aex{wwwПfGGuxuuuuuuemfxxxnfgggggggfnwunnnnuuoxuuw֟gUz! |_xÔxugoxffmmnnnuuuunnux𯮝ooxxwwwt{oxggofCSA} l$!uxxxxoowwwwwxufjjjnnmfuu{www×xxw-!@QP@$|T~Guxuuwwuwʐwuuwːnu×xU% !G wHnv- #@RQVQ W}__W$-eːnuuuu˗×ʐed%!BHXXfKGGe- nUCCJ\oƖ\-$vzzons  $$V}|A@A%E%CBBJBB-!%%%--GennoxxUK-zǮ❖J,!,77C\\n$m vĖ $QRR$VVW}A uUB,%oǝ\ U㯮S U Q}vT@}VRVu(( 4L?N \ƝĖzU,,ǯ+C$T}sR (4;-n 4+ :N 8/ 5 ǬƖ⮮Ǭǝv  As}Q5 +(/( ; Y55:? 5  4? (BƝƬzSQ| 54* O= D:L5( 99>>?4CvvzzC   Q}:LN(35N/:3 ( (N5H7(;* ++$SvƖ⬭zC %%%EE%% WOO=?3+ )(45N3(:HLOJ -SCSUvƮM-   ddr{{{{rddE gBB-N?=N3:=(;!B+ !,CUJ7 %%%%%d{{{{rrd%% +YJ M:( ;=N= ;+*+L]JML+n  %%EddE%%E%%dr{{{{d% ++Y!  7I1=H1 5 HH+X+M+B++o  %%%EdEdd{rdr{r{{{{{{rE% +XY]]+ +  ::+X+!  %drr{rdrr{{{rreddE%% +JB- -+!+ !O: BG$şBU- !!! U %EEr{{{{{{{{rueG-%%% !BUggJooG򽾾O ++B! oxo×X- ⬝ %Edr{{{{rr{{{{ufKBG--!! !JŗooogL+H++,HXŮƗ-!❖ %E%E{r{xxgfKBBB--! KЪ 4X+OYL4+4;M]]g!U\ %Ed{uxЪДfKKGB+! +JBBB!!  +X+X+BB+!  -UoznUCC %duۑ󳶶gXHHKG-!  HYY+ %EGeux슪򫫶YL5HBB+!  G%f-U !! !-Kfggfx摪򶥥OO:5H4BB! +xxoŗgC! !++HXY횪䫫䫤OL:5535444+  +XЮ\,  (((BHXXY䫫䥪YL555555444++( 444LY]\  +BHXfgg䫫䫚綶YON:9:H::55H45/(&(+BKXX򳥥綥Ъ攚YNNNH3/((&  /8/&(////39/&(/9>(&/5 &&/O(>../4?/((/229353 &/:(N(>N/82(   +4BGKuxuxÔ犥󳱳NNN?:59<9334HHHH+-%%E% &:?2L KK Xf YN((geBeK Y9Y +4+(+gYL?YLN 55+3 %%%!%!-----BBBHKXXf䥥򊥥򶳶䪫N?L:YYOXXgxffeerrdEE%%%% : X(e GGBKL KG  %Ge- -e4 !!KHe4+ YY:25-4L5X +H(5(:> %%Eddddr{euuuÔxxxxgЪж򻺺Њ䥥gxurrdrdddEEE% (/ (ONNKX / KK /g + !fe-fe::Xe9+O +: %%EEEdd{Ф󫫶򻻱򶹳򊧫Ы򥥱Пurdddrrrd%%% !3(((/ !!/2>4 BH!/ !%%!+B: !BHN9!!+H !%!!% LH?::/( %EddEr{{{䶶Ы䶫䶫䪞xuuedrddrrdE%  %Errddr{{{Ы䫳򶶻LXЫgŔxggureEddEEEE%%  %Eddd{ОЪ䫫ЪSystem\Manifest.ini System\Manifest.int System\CorpseMania.u"System\CorpseMania.int?System\CorpseMania.txt%CorpseManiaLogo.bmp,qJ,M*M