*~@Q&Bc>&p/[J"QNoneEngineCrossbowWeaponCore BDCrossbowAdvancedEngineSystem DOTZEngine EndAimedMode StaticMeshStartAimedModeToggleAimedMode DrawType MyDamageTypeOldbolt PickupClassActionPickupMessageSetSensitivityTempMeshInventoryTypeSpawnProjectile BeginPlayPostBeginPlaySniperRifleCrouchIdleSniperRifleStandIdle SniperHitLandedUserNotify_SpawnProjectile SpawnDelayLocalRandSpinXDOTZPlayerControllerHitWallSniperRifleFire WeaponMode HitAnimName BounceSoundCrouchIdleAnimNamePawnStandIdleAnimName FireAnimNamePawnAnimationPackageGrenadeAmmunitionClassSwayMagSpawnProjectileEx OfficialName TakeDamageMouseSenseLeveldrawFirstPersonWeaponZoomLevelFOVs StartSway ZoomOutDelay ScopeTexEndSwayVector reZoomLevelDamage DamageAmount ItemNameFireBoltAltFireGetViewRotation bBlockActors WeaponChangePhysics bBlockKarma ReloadingMomentumTransfer bProjTargetbFixedRotationDirSpeed GetFireStart NormalFire ProcessTouch LifeSpanGetLocalPlayerControllerAttachmentClassCrossbowAmmunitionCrossbowAttachmentProjectileFirePlayReloading FireOffset ReloadCountbRotateToDesiredbBounceAutoSwitchPriorityInventoryGroupCrossbowPickupPickupAmmoCountCrossbowProjectile AmmoAmount AmmoName MultiTimer FireSoundMaxAmmoProjectileClassSingleCBAmmoPickupClipY aimerror AmmoTypeSetPosDrawTileScaled AdjustedAim AdjustAimf spinRatePCWallDirStart HitLocation ScriptText HitNormalOther InstigatorOwnerMouseSensitivityValueClipXCXYZAdvancedWeapon Location RotationAdvancedPlayerController Velocity ReturnValueWeapon AimedFOVbRenderWeaponMesh LevelInfo ProjectileAdvancedWeaponAttachmentscaleYscaleXtimerID ControllerPlayerControllerCanvasLevel SkeletalMeshStaticMeshActorBitmapMaterialbAimingStaticReticuleAccuracyIndicatorRangedActorDOTZGrenadeWeaponVSizeDOTZProjectileBaseDOTZGrenadePickupDOTZBulletDamageDOTZAmmunitionBaseDOTZAmmoPickup DOTZXWeaponsRangedGrenadeBounceMixdownMixdownRangedGrenadeShootUSizeSoundTextureClassPackageConst PlayerInput TextBufferObject FunctionStateRotatorStruct SpawnDir SpawnLocnSPAWN_DELAY_TIMERZOOM_OUT_TIMER bWasAimedcurrentZoomLevel texScaleX texScaleYBouncedStructPropertyArrayPropertyClassPropertyObjectPropertyFloatProperty BoolProperty IntProperty BytePropertybSilent KillerBoltBDCrossbowMesh CrossbowBDCrossbowSkinsCrossbowScope BDCrossbowA 3PCrossbow $NN2/+9"(_"-`   @0DX2 ƽ*]#"Press Action to take the Crossbow  1@/3a2{rռW]'&Press Action to pick up Crossbow Bolt["A  >OZ*Լ}ebebeb<$G$@E8$HBD$E   ?EBUFTK$A=@2Edؠw̅ebL9L9+L9ZL9Z33q{3q{3Jq Ic\; IcL9sߊ$=43$333?1Y  /Y  @??+"7")]DOTZAHumans.3PSniperRifle(!'%#"-] Crossbow\Y"SV"R:6AAW M!:] Crossbow) .L@-9D9?&9?7&K |% & & GO!,})6^E. #A**.2$9? % 0HI-9? 9? -(-'$% &;Zb $-a( +'=!(&a/!(  (]b 0 -'.  2 371740*QsS % ,I\ -@ -  4382U// Braindead@Undeadgames.com class SingleCBAmmoPickup extends DOTZAmmoPickup; #B &.5 47Ck ! #68 h 5** 9b? > H  9D., ]//Braindead@Undeadgames.com class Oldbolt extends StaticMeshActor placeable; ;<@mQ p_//BD class CrossbowWeapon extends DOTZGrenadeWeapon config(user); //NOTE could do the same for Reloading-AnimEnd... // Manually tune to be in-synch w/ throw anim. See also FireOffset. var() float SpawnDelay; // internal... var private Rotator SpawnDir; var private Vector SpawnLocn; const SPAWN_DELAY_TIMER = 4382; // configurable var() Texture ScopeTex; var() float ZoomOutDelay; var() Array ZoomLevelFOVs; var() Array MouseSenseLevel; var() int SwayMag; // internal const ZOOM_OUT_TIMER = 371740; var protected bool bWasAimed; var protected int currentZoomLevel; // 0 (no zoom) ... N (max zoom) var protected int reZoomLevel; simulated function AltFire( float Value ) { //ON PC ONLY if (Instigator.Controller.IsA('XDotzPlayerController') == false){ ToggleAimedMode(); } //super.AltFire(Value); does reload } /** * Cycle through zoom levels instead of on/off toggle... */ simulated function ToggleAimedMode() { local PlayerController pc; pc = Level.GetLocalPlayerController(); if ( bAiming ) { currentZoomLevel = (currentZoomLevel + 1) % (ZoomLevelFOVs.length + 1); } //re-aiming, set zoom level to whatever it was when we un-zoomed else { currentZoomLevel = reZoomLevel; } if ( currentZoomLevel == 0 ){ pc.SetSensitivityTemp(class'PlayerInput'.default.MouseSensitivity); EndAimedMode(); // EndAimedMode(); } else { pc.SetSensitivityTemp(MouseSenseLevel[currentZoomLevel - 1]); StartAimedMode( ZoomLevelFOVs[currentZoomLevel - 1] ); } } /** * Draw the scope first when zoomed in, and disable rendering of the gun. */ simulated function drawFirstPersonWeapon( canvas c, float scaleX, float scaleY ) { local float texScaleX, texScaleY; if ( bAiming ) { c.setPos( 0,0 ); texScaleX = c.clipX / scopeTex.uSize; texScaleY = c.clipY / scopeTex.vSize; c.drawTileScaled( scopeTex, texScaleX, texScaleY ); bRenderWeaponMesh = false; } else { bRenderWeaponMesh = true; } super.drawFirstPersonWeapon( c, scaleX, scaleY ); } /** * Start the timer to kick out of the scope view... */ simulated function Fire(float Value) { //NOTE this would probably be better as a notify on the fire anim... if ( bAiming ) SetMultiTimer( ZOOM_OUT_TIMER, ZoomOutDelay, false ); super.Fire( value ); } /** * Timers... */ simulated function MultiTimer( int timerID ) { switch ( timerID ) { case ZOOM_OUT_TIMER: EndAimedMode(); bWasAimed = true; break; default: super.MultiTimer( timerID ); } } /** * End all zooming effects */ simulated function PlayReloading() { // Log( self @ "PLAYRELOADING" ) ; currentZoomLevel = 0; EndAimedMode(); super.PlayReloading(); } /** * At the end of the fire anim, go back to zoomed mode. */ state NormalFire { /* HACKED OUT, REQUIRE PLAYER TO MANUALLY RE-ZOOM function AnimEnd(int Channel) { // from base class... Finish(); CheckAnimating(); // re-enagage aim... if ( bWasAimed && !bAiming && currentZoomLevel > 0 ) { StartAimedMode(ZoomLevelFOVs[currentZoomLevel - 1]); } } */ } /** * Make sure we disable aimed mode. */ simulated function Weapon WeaponChange( byte F, bool bSilent ) { EndAimedMode(); return super.WeaponChange( f, bSilent ); } /***************************************************************** * StartAimedMode * Sniper rifle does sway when zoomed ***************************************************************** */ simulated function StartAimedMode( optional int AimedFOV ) { super.StartAimedMode(AimedFOV); AccuracyIndicator = none; StaticReticule = none; AdvancedPlayerController(Instigator.Controller).StartSway( SWAY_SIDEWAYS, SwayMag ); } /***************************************************************** * EndAimedMode ***************************************************************** */ simulated function EndAimedMode() { reZoomLevel = 1; //max( 1, currentZoomLevel ); super.EndAimedMode(); AccuracyIndicator = default.AccuracyIndicator; StaticReticule = default.StaticReticule; AdvancedPlayerController(Instigator.Controller).EndSway(); } state Reloading{ simulated function ToggleAimedMode() { } simulated function StartAimedMode( optional int AimedFOV ) { } } /** * A quick hack, since the default props don't seem to be sticking. */ function BeginPlay() { super.BeginPlay(); default.staticReticule = none; StaticReticule = none; } /** */ function SpawnProjectile(){ local Vector Start, X,Y,Z; Owner.MakeNoise(1.0); GetAxes(Instigator.GetViewRotation(),X,Y,Z); Start = GetFireStart(X,Y,Z); AdjustedAim = Instigator.AdjustAim(AmmoType, Start, AimError); // all timer for the animation to get to the release point before // spawning... SpawnDir = AdjustedAim; SpawnLocn = start; DOTZAmmunitionBase(AmmoType).SpawnProjectileEx( SpawnLocn, SpawnDir ,Instigator); } /** * Replaces default weapon behaviour so that projectile is spawned * during the fire animation (instead of before). */ function ProjectileFire() { SetMultiTimer( SPAWN_DELAY_TIMER, spawnDelay, false ); } /***************************************************************** * Notify_SpawnProjectile * Called from the animation to let us know the best point to release the grenade ***************************************************************** */ function Notify_SpawnProjectile(){ SpawnProjectile(); } //=========================================================================== // DefaultProperties //=========================================================================== H%// BD class CrossbowProjectile extends DOTZProjectileBase; var StaticMesh Bolt; var int Bounced; var sound BounceSound; var class Oldbolt; var DOTZAmmoPickup KillerBolt; /***************************************************************** * PostBeginPlay * Give your newly spawned projectile a velocity ***************************************************************** */ function PostBeginPlay() { local vector Dir; //Give your projectile a velocity Dir = vector(Rotation); velocity = (speed * Dir) + owner.velocity; // LocalRandSpin(12000); // if (abs(RotationRate.Pitch)<10000){RotationRate.Pitch=10000;} // if (abs(RotationRate.Roll)<10000) {RotationRate.Roll=10000;} Super.PostBeginPlay(); } /***************************************************************** * RandSpin ***************************************************************** */ function LocalRandSpin(float spinRate) { // DesiredRotation = RotRand(); // RotationRate.Yaw = spinRate * 2 *FRand() - spinRate; // RotationRate.Pitch = spinRate * 2 *FRand() - spinRate; // RotationRate.Roll = spinRate * 2 *FRand() - spinRate; } /***************************************************************** * Landed ***************************************************************** */ simulated function Landed( vector HitNormal ){ // Explode(Location, vect(0,0,1)); // Spawn(oldbolt,self,,Location); } /***************************************************************** * HitWall ***************************************************************** */ simulated function HitWall(vector HitNormal, actor Wall){ if (Wall.IsA('Pawn') == true && Instigator != Pawn(Wall)){ // Explode(Location, vect(0,0,1)); // Spawn(BloodEmitter,,,location); Wall.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType); Destroy(); } else{ Destroy(); Spawn(oldbolt,self,,Location); } } function ProcessTouch(Actor Other, Vector HitLocation) { // Explode(Location, vect(0,0,1)); // Spawn(oldbolt,self,,Location); } //=========================================================================== // DefaultProperties //=========================================================================== :Pa( ? BC"E//BD class CrossbowPickup extends DOTZGrenadePickup placeable; //=========================================================================== // DefaultProperties //=========================================================================== A 7 99   }//BD class CrossbowAttachment extends AdvancedWeaponAttachment; //=========================================================================== // DefaultProperties //=========================================================================== FI' HK1 JM :zfa/!&'w.*.9Daxaa"  z//BD class CrossbowAmmunition extends DOTZAmmunitionBase; //=========================================================================== // DefaultProperties //=========================================================================== LPJK Qfffe|eVekejfe|exe&e{eeeMn6e~{seieFeBfB{See]e\ <{TeLx@edeheW{K}Rf^egx}kQe}eQ{tkkk]eZ}DePe[fFk {dxgkk@k;eGk0eleyeYkJ|Dz |8k |u|ckf|wk=lCkPkh|Gkkex~lI{N~X~bnmeEk eKece fUc_f`caefDez C|bOGdEOCt i5&x u5 k B6Ll O64 \6Nsi6:n \8:{ i8&v v8:z B9:y O97 \9Fm h9*J u91 A:oN:p \:XLi:&u u<3 A= M=.@ Y=/ e=.i r=+ =#C K>s W>aYc>Z||@(v xCRDD KVKOdaMEO @TO&I TP&H `P0NlP)v zR;2FS=7xS]BZC,@[ 5 l[#5 H\7C d\'p\yW]<p4hP_[x`p4{_Sbp4S%NP)aJ<iw x$Ep4PSA c