here goes...
I've been feebly attempting to make UT mutators. It's kinda working - I made a few adreneline combos (just modifications of the UnrealWiki speed combo and stuff), and even a weapon (an instagib lightning gun)
I wanted to try replicating the Unreal 2 sniper rifle zoom, but I'm having some trouble doing that. Tim had given me some code earlier, and I managed to extract some of the U2 sniper rifle code directly from the U2weapons.u file, but I still don't know how to actually modify the actual SR/LG zoom code...

This is what I've gleaned so far:
Tim wrote:Code: Select all
if ( PlayerController(Instigator.Controller).DesiredFOV == PlayerController(Instigator.Controller).DefaultFOV ) { Super.RenderOverlays(Canvas); zoomed=false; } else { if ( FireMode[0].NextFireTime <= Level.TimeSeconds ) { chargeBar = 1.0; } else { chargeBar = 1.0 - ((FireMode[0].NextFireTime-Level.TimeSeconds) / FireMode[0].FireRate); } CX = Canvas.ClipX/2; CY = Canvas.ClipY/2; Scale = Canvas.ClipX/1024; Canvas.Style = ERenderStyle.STY_Alpha; Canvas.SetDrawColor(0,0,0); // Draw the crosshair Canvas.SetPos(CX-169*Scale,CY-155*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair',169*Scale,310*Scale, 164,35, 169,310); Canvas.SetPos(CX,CY-155*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair',169*Scale,310*Scale, 332,345, -169,-310); // Draw Cornerbars Canvas.SetPos(160*Scale,160*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair', 111*Scale, 111*Scale , 0 , 0, 111, 111); Canvas.SetPos(Canvas.ClipX-271*Scale,160*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair', 111*Scale, 111*Scale , 111 , 0, -111, 111); Canvas.SetPos(160*Scale,Canvas.ClipY-271*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair', 111*Scale, 111*Scale, 0 , 111, 111, -111); Canvas.SetPos(Canvas.ClipX-271*Scale,Canvas.ClipY-271*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair', 111*Scale, 111*Scale , 111 , 111, -111, -111); // Draw the 4 corners Canvas.SetPos(0,0); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair',160*Scale,160*Scale, 0, 274, 159, -158); Canvas.SetPos(Canvas.ClipX-160*Scale,0); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair',160*Scale,160*Scale, 159,274, -159, -158); Canvas.SetPos(0,Canvas.ClipY-160*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair',160*Scale,160*Scale, 0,116, 159, 158); Canvas.SetPos(Canvas.ClipX-160*Scale,Canvas.ClipY-160*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair',160*Scale,160*Scale, 159, 116, -159, 158); // Draw the Horz Borders Canvas.SetPos(160*Scale,0); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair', Canvas.ClipX-320*Scale, 160*Scale, 284, 512, 32, -160); Canvas.SetPos(160*Scale,Canvas.ClipY-160*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair', Canvas.ClipX-320*Scale, 160*Scale, 284, 352, 32, 160); // Draw the Vert Borders Canvas.SetPos(0,160*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair', 160*Scale, Canvas.ClipY-320*Scale, 0,308, 160,32); Canvas.SetPos(Canvas.ClipX-160*Scale,160*Scale); Canvas.DrawTile(texture'NewSniperRifle.COGAssaultZoomedCrosshair', 160*Scale, Canvas.ClipY-320*Scale, 160,308, -160,32); // Draw the Charging meter Canvas.DrawColor = ChargeColor;
U2weapons.u wrote:Code: Select all
// WeaponInvSniperRifle.uc // $Author: Aleiby $ // $Date: 8/19/02 8:12p $ // $Revision: 1 $ //============================================================================= class WeaponInvSniperRifleSmall extends WeaponInvSniperRifle; ÿÿÿÿÿÿÿÿ // WeaponInvSniperRifle.uc // $Author: Aleiby $ // $Date: 12/02/02 5:28p $ // $Revision: 47 $ //============================================================================= class WeaponInvSniperRifle extends U2Weapon; #exec OBJ LOAD File=..\Meshes\GlmWeaponsG.ugx #exec OBJ LOAD File=..\System\ParticleRes\SniperFX.u #exec OBJ LOAD File=..\System\ParticleRes\SniperTracer.u #exec OBJ LOAD File=..\Textures\WeaponFXT.utx var vector PawnLocation; // track Pawn location to compute "StillTime" var float StillTime, StillStart; // adjust WeaponAimSpread for Bots based on StillTime var bool bZoomed, bWasZoomed; var float ZoomFOV; var vector RingLoc; var() float RingDelayFactor; var float Angle, Radius; var Point RingLocation; var() Sound ZoomInSound; var() Sound ZoomOutSound; var() Sound AdjustZoomSound; simulated function int GetFireAmmoUsed() { if( U2NPCController(Instigator.Controller) != None ) return AmmoType.AmmoAmount; // force NPCs to reload after every shot? else return Super.GetFireAmmoUsed(); } /*mdf-tbd: not used currently? event Timer() { local Actor Target; local float bestAim, bestDist; local vector FireDir; bestAim = 0.95; if( Instigator == None ) { GotoState(''); return; } if( VSize( Instigator.Location - PawnLocation ) <6> 0.62 * Hit.Actor.CollisionHeight ) //CDH head shot (replace with mesh trace damage) { EffectiveDamage *= 1.5; } Super.ProcessTraceHitEx( HitDirection, Hit, EffectiveDamage ); } //override so altfiring state is not used, and so that we don't use ammo or switch weapons simulated function AltFire() { if( bZoomed ) UnZoom(); else Zoom(); } simulated function NotifyCutsceneBegin() { if( bZoomed ) UnZoom(true); } //prevents weapon switching for the sniper rifle simulated function bool PutDown() { if (bZoomed) { Pawn(Owner).PendingWeapon = None; return false; } return Super.PutDown(); } simulated function SetPlayerFOV( float NewFOV ) { assert( bZoomed ); ZoomFOV = FClamp( NewFOV, 1.0, 60.0 ); if( PlayerController(Instigator.Controller) != None ) { PlayerController(Instigator.Controller).DesiredFOV = ZoomFOV; } } exec simulated function ZoomIn() { if( bZoomed ) { if( ZoomFOV > 20 ) { // 90 --> 20 by 10 SetPlayerFOV( ZoomFOV - 10 ); } else if( ZoomFOV > 5 ) { // 20 --> 5 by 5 SetPlayerFOV( ZoomFOV - 5 ); } else { // 5 --> 1 by 2 SetPlayerFOV( ZoomFOV - 2 ); } PlaySound( AdjustZoomSound ); } } exec simulated function ZoomOut() { if( bZoomed ) { if( ZoomFOV >= 20 ) { // 20 --> 90 by 10 SetPlayerFOV( ZoomFOV + 10 ); } else if( ZoomFOV >= 5 ) { // 5 --> 20 by 5 SetPlayerFOV( ZoomFOV + 5 ); } else { // 1 --> 5 by 2 SetPlayerFOV( ZoomFOV + 2 ); } PlaySound( AdjustZoomSound ); } } simulated function Zoom() { //only execute this code on the local machine and server ... not the third-person players if ( !bZoomed && Instigator.Controller != None ) { bZoomed = true; SetPlayerFOV( ZoomFOV ); if( U2PCOwner != None ) U2PCOwner.SendEvent("Rotate"); PlaySound( ZoomInSound ); } } simulated function UnZoom( optional bool bForce ) { //only execute this code on the local machine and server ... not the third-person players if ( bZoomed && Instigator.Controller != None ) { bZoomed = false; if( PlayerController(Instigator.Controller) != None ) { PlayerController(Instigator.Controller).DesiredFOV = PlayerController(Instigator.Controller).DefaultFOV; if( bForce ) PlayerController(Instigator.Controller).FOVAngle = PlayerController(Instigator.Controller).DefaultFOV; } if( U2PCOwner != None ) U2PCOwner.SendEvent("UnRotate"); PlaySound( ZoomOutSound ); } } simulated function ClearWeaponEffects() { Super.ClearWeaponEffects(); UnZoom(); } simulated state Unloading { simulated event BeginState() { Super.BeginState(); bWasZoomed = bZoomed; UnZoom(); } simulated event EndState() { Super.EndState(); if (bWasZoomed) Zoom(); } } simulated state Reloading { simulated event BeginState() { Super.BeginState(); bWasZoomed = bZoomed; UnZoom(); } simulated event EndState() { Super.EndState(); if (bWasZoomed) Zoom(); } } simulated state DownWeapon { ignores Fire, AltFire; simulated event BeginState() { UnZoom(); Super.BeginState(); } } simulated function ClientTraceImpact( CheckResult Hit ) { UpdateTracer(Hit,1); // UpdateTracer(Hit,2); // UpdateTracer(Hit,3); } simulated function UpdateTracer( CheckResult Hit, int Index ) { local PulseLineGenerator Tracer; Tracer = PulseLineGenerator(DecoEffects[Index].Effect); if (!Tracer) return; if (Tracer.Connections.length!=1) Tracer.Connections.length = 1; Tracer.Connections[0].StartActor = Tracer; Tracer.Connections[0].End = Hit.Location; Tracer.BeamTexture.ResetModifiers(); }
SniperZoom.uc wrote:Code: Select all
class SniperZoom extends WeaponFire; defaultproperties { FireAnim=Idle FireRate=0.1 bModeExclusive=false bWaitForRelease=true BotRefireRate=0.3 }
I was just hoping someone could help me string the pieces together...
