[Solved] Need help for Display the Missile of MH2Reedemer

Discussions about Coding and Scripting
Letylove49
Adept
Posts: 277
Joined: Tue Feb 28, 2012 7:47 pm
Location: suisse

[Solved] Need help for Display the Missile of MH2Reedemer

Post by Letylove49 »

I can’t get the redeemer’s missile to be visible online. However if I put this mod on my ut offline it works perfectly. I will post a sceenshot of the bug.

Off Ligne
Shot00389.png
Online
Shot00388.png
settings Online:

Code: Select all

 CustomGameConfig[6]=(bEnabled=True,GameClass="MonsterHunt2GoldUK.MonsterHunt",NewPrefix="MH2",Mutators="MoreGunsv6.MoreGuns,fnn170.DisableNewNet,fnn170.DisableWeapons,fnn170.TeleportToPoint,MonsterHunt2GoldUK.IP2Country,MonsterHunt2GoldUK.Stats,MonsterHunt2GoldUK.MH2PlayerLog,MonsterHunt2GoldUK.RelicDefense,MonsterHunt2GoldUK.RelicSpeed,MonsterHunt2GoldUK.RelicStrength,MonsterHunt2GoldUK.RelicDeath,MonsterHunt2GoldUK.RelicInvulnerable,MonsterHunt2GoldUK.RelicRadiation,MonsterHunt2GoldUK.ShutUp,HideNPeekMHv4.HideNPeekMHv4",Settings="bBalanceTeams=False,MaxPlayers=16,MaxSpectators=0,bPlayersBalanceTeams=False")
here the code:
class MH2WarShell

Code: Select all

 class MH2WarShell extends Projectile config(MonsterHunt2GoldUK);

#exec mesh import mesh=deemah1 anivfile=Models\deemah1_a.3d datafile=Models\deemah1_d.3d x=0 y=0 z=0 mlod=0
#exec mesh origin mesh=deemah1 x=0 y=0 z=0
#exec mesh sequence mesh=deemah1 seq=All startframe=0 numframes=1

#exec meshmap new meshmap=deemah1 mesh=deemah1
#exec meshmap scale meshmap=deemah1 x=0.08607 y=0.08607 z=0.17214

#exec TEXTURE IMPORT NAME=RDMR_Missile FILE=Textures\RDMR_Missile.bmp GROUP=Skins

var float CannonTimer, SmokeRate;
var redeemertrail trail;
var config int MissileSpeed;
var() class<Decal> ExplosionDecalA;

simulated function Timer()
{
   local ut_SpriteSmokePuff b;

   if ( Trail == None )
      Trail = Spawn(class'RedeemerTrail',self);

   CannonTimer += SmokeRate;
   if ( CannonTimer > 0.6 )
   {
      WarnCannons();
      CannonTimer -= 0.6;
   }
   if ( Region.Zone.bWaterZone || (Level.NetMode == NM_DedicatedServer) )
   {
      SetTimer(SmokeRate, false);
      Return;
   }
   if ( Level.bHighDetailMode )
   {
      if ( Level.bDropDetail )
         Spawn(class'LightSmokeTrail');
      else
         Spawn(class'UTSmokeTrail');
      SmokeRate = 152/Speed;
   }
   else
   {
      SmokeRate = 0.15;
      b = Spawn(class'ut_SpriteSmokePuff');
      b.RemoteRole = ROLE_None;
   }
   SetTimer(SmokeRate, false);
}

simulated function Destroyed()
{
   if ( Trail != None )
      Trail.Destroy();
   Super.Destroyed();
}

simulated function PostBeginPlay()
{
   SmokeRate = 0.3;
   SetTimer(0.3,false);
}

function WarnCannons()
{
   local Pawn P;

   for ( P=Level.Pawnlist; P!=None; P=P.NextPawn )
      if ( P.IsA('TeamCannon') && !P.IsInState('TrackWarhead') && P.LineOfSightTo(self) )
      {
         P.target = self;
         P.GotoState('TrackWarhead');
       }
}

singular function TakeDamage( int NDamage, Pawn instigatedBy, Vector hitlocation,
                        vector momentum, name damageType )
{
   if ( NDamage > 5 )
   {
      PlaySound(Sound'Expl03',,6.0);
      spawn(class'SmallRedeemerExplosion',,,Location);
      HurtRadius(Damage,350.0, MyDamageType, MomentumTransfer, HitLocation );
      RemoteRole = ROLE_SimulatedProxy;
      Destroy();
   }
}

auto state Flying
{
   simulated function ZoneChange( Zoneinfo NewZone )
   {
      local waterring w;

      if ( NewZone.bWaterZone != Region.Zone.bWaterZone )
      {
         w = Spawn(class'WaterRing',,,,rot(16384,0,0));
         w.DrawScale = 0.2;
         w.RemoteRole = ROLE_None;
       }
   }
   function ProcessTouch (Actor Other, Vector HitLocation)
   {
      if ( Other != instigator )
         Explode(HitLocation,Normal(HitLocation-Other.Location));
   }
   function Explode(vector HitLocation, vector HitNormal)
   {
      if ( Role < ROLE_Authority )
         return;

      HurtRadius(Damage,300.0, MyDamageType, MomentumTransfer, HitLocation );
      spawn(class'MH2ShockWave',,,HitLocation+ HitNormal*16);
      RemoteRole = ROLE_SimulatedProxy;
      Destroy();
   }
   function BeginState()
   {
      local vector InitialDir;

      Speed=MissileSpeed;
      initialDir = vector(Rotation);
      if ( Role == ROLE_Authority )
         Velocity = speed*initialDir;
      Acceleration = initialDir*50;
   }
}

simulated function HitWall (vector HitNormal, actor Wall)
{
   if ( Role == ROLE_Authority )
   {
      if ( (Mover(Wall) != None) && Mover(Wall).bDamageTriggered )
         Wall.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), '');

      MakeNoise(1.0);
   }
   Explode(Location + ExploWallOut * HitNormal, HitNormal);
   if ( (ExplosionDecal != None) && (Level.NetMode != NM_DedicatedServer) )
      if ( FRand() < 0.80)
	 Spawn(ExplosionDecal,self,,Location, rotator(HitNormal));
      else
         Spawn(ExplosionDecalA,self,,Location, rotator(HitNormal));
}

defaultproperties
{
    ExplosionDecalA=Class'MH2WarShellMark'
    Damage=1000.00
    MomentumTransfer=100000
    MyDamageType=RedeemerDeath
    ExplosionDecal=Class'Botpack.NuclearMark'
    bNetTemporary=False
    RemoteRole=2
    AmbientSound=Sound'Botpack.Redeemer.WarFly'
    AmbientGlow=78
    bUnlit=True
    MultiSkins=Texture'Skins.RDMR_Missile'
    SoundRadius=100
    SoundVolume=255
    CollisionRadius=7.00
    CollisionHeight=4.00
    bProjTarget=True
    bFixedRotationDir=True
    RotationRate=(Pitch=0,Yaw=0,Roll=20000),
}
MH2WarShellAmmo

Code: Select all

class MH2WarShellAmmo extends TournamentAmmo;

defaultproperties
{
    MaxAmmo=2
} 
if you need of the class MH2WarheadLauncher i can put it but on a 2nd post .
You do not have the required permissions to view the files attached to this post.
Last edited by Letylove49 on Fri Jan 06, 2023 11:39 pm, edited 1 time in total.
Image



Letylove49 aka Alicia
Masterkent
Novice
Posts: 18
Joined: Mon Dec 12, 2022 3:19 pm

Re: Need help for Display the Missile of MH2Reedemer

Post by Masterkent »

Where do you assign projectile's Mesh?
Letylove49
Adept
Posts: 277
Joined: Tue Feb 28, 2012 7:47 pm
Location: suisse

Re: Need help for Display the Missile of MH2Reedemer

Post by Letylove49 »

Masterkent wrote: Tue Dec 13, 2022 10:58 am Where do you assign projectile's Mesh?

here the class MH2WarheadLauncher

Code: Select all

 class MH2WarheadLauncher extends TournamentWeapon;

#exec MESH IMPORT  MESH=WarHead ANIVFILE=MODELS\war_a.3D DATAFILE=MODELS\war_d.3D X=0 Y=0 Z=0
#exec MESH ORIGIN MESH=WarHead X=0 Y=-210 Z=-50 YAW=64 PITCH=16  ROLL=-62
#exec MESH SEQUENCE MESH=WarHead SEQ=All         STARTFRAME=0   NUMFRAMES=35
#exec MESH SEQUENCE MESH=WarHead SEQ=Select      STARTFRAME=0   NUMFRAMES=15
#exec MESH SEQUENCE MESH=WarHead SEQ=Still       STARTFRAME=15  NUMFRAMES=1
#exec MESH SEQUENCE MESH=WarHead SEQ=Idle        STARTFRAME=15  NUMFRAMES=5
#exec MESH SEQUENCE MESH=WarHead SEQ=Down        STARTFRAME=20  NUMFRAMES=7
#exec MESH SEQUENCE MESH=WarHead SEQ=Fire        STARTFRAME=28  NUMFRAMES=7
#exec TEXTURE IMPORT NAME=Jwarhead1 FILE=MODELS\warh1.PCX GROUP=Skins LODSET=2
#exec TEXTURE IMPORT NAME=Jwarhead2 FILE=MODELS\warh2.PCX GROUP=Skins LODSET=2
#exec TEXTURE IMPORT NAME=Jwarhead3 FILE=MODELS\warh3.PCX GROUP=Skins LODSET=2
#exec TEXTURE IMPORT NAME=Jwarhead4 FILE=MODELS\warh4.PCX GROUP=Skins LODSET=2
#exec MESHMAP SCALE MESHMAP=WarHead X=0.006 Y=0.006 Z=0.012
#exec MESHMAP SETTEXTURE MESHMAP=WarHead NUM=0 TEXTURE=Jwarhead1
#exec MESHMAP SETTEXTURE MESHMAP=WarHead NUM=1 TEXTURE=Jwarhead2
#exec MESHMAP SETTEXTURE MESHMAP=WarHead NUM=2 TEXTURE=Jwarhead3
#exec MESHMAP SETTEXTURE MESHMAP=WarHead NUM=3 TEXTURE=Jwarhead4

#exec MESH IMPORT MESH=WHHand ANIVFILE=MODELS\WHpick_a.3D DATAFILE=MODELS\WHpick_d.3D X=0 Y=0 Z=0
#exec MESH ORIGIN MESH=WHHand X=-150 Y=-110 Z=0 YAW=0 ROLL=-64
#exec MESH SEQUENCE MESH=WHHand SEQ=All         STARTFRAME=0   NUMFRAMES=1
#exec MESH SEQUENCE MESH=WHHand SEQ=Still       STARTFRAME=0   NUMFRAMES=1
#exec MESHMAP SCALE MESHMAP=WHHand X=0.05 Y=0.05 Z=0.1
#exec MESHMAP SETTEXTURE MESHMAP=WHHand NUM=1 TEXTURE=JWHPick1

#exec TEXTURE IMPORT NAME=IconWarH FILE=MODELS\IconWarH.PCX GROUP="Icons" MIPS=OFF
#exec TEXTURE IMPORT NAME=UseWarH FILE=MODELS\UseWarH.PCX GROUP="Icons" MIPS=OFF

//Custom import from here
#exec TEXTURE IMPORT NAME=ReadoutA FILE=TEXTURES\ReadoutA.pcx GROUP="Icons" FLAGS=2 MIPS=OFF
#exec TEXTURE IMPORT NAME=Static_A00A FILE=TEXTURES\Static_A00A.pcx FLAGS=2 MIPS=OFF
#exec TEXTURE IMPORT NAME=GuidedX FILE=TEXTURES\GuidedX.PCX GROUP="Icons" FLAGS=2 MIPS=OFF
#exec AUDIO IMPORT FILE=Sounds\umdeemershot.wav NAME="umdeemershot"
#exec AUDIO IMPORT FILE=Sounds\redeemer_change.wav NAME="redeemer_change"

var MH2GuidedWarShell GuidedShell;
var int Scroll;
var PlayerPawn GuidingPawn;
var bool    bGuiding, bCanFire, bShowStatic;
var rotator StartRotation;
var int ScrollCounter;
var int ScrollSpeed;

replication
{
    reliable if( bNetOwner && (Role==ROLE_Authority) )
        bGuiding, bShowStatic;
}

function SetWeaponStay()
{
    bWeaponStay = false;
}

simulated function PostRender( canvas Canvas )
{
    local int i, numReadouts, OldClipX, OldClipY;
    local float XScale;

    bOwnsCrossHair = ( bGuiding || bShowStatic );

    if ( !bGuiding )
    {
        if ( !bShowStatic )
            return;

        Canvas.SetPos( 0, 0);
        Canvas.Style = ERenderStyle.STY_Normal;
        Canvas.DrawIcon(Texture'Static_A00A', FMax(Canvas.ClipX, Canvas.ClipY)/256.0);
        if ( Owner.IsA('PlayerPawn') )
            PlayerPawn(Owner).ViewTarget = None;
        return;
    }
    GuidedShell.PostRender(Canvas);
    OldClipX = Canvas.ClipX;
    OldClipY = Canvas.ClipY;
    XScale = FMax(0.5, int(Canvas.ClipX/640.0));
    Canvas.SetPos( 0.5 * OldClipX - 128 * XScale, 0.5 * OldClipY - 128 * XScale );
    if ( Level.bHighDetailMode )
        Canvas.Style = ERenderStyle.STY_Translucent;
    else
        Canvas.Style = ERenderStyle.STY_Normal;
    Canvas.DrawIcon(Texture'GuidedX', XScale);
    numReadouts = OldClipY/128 + 2;
    for ( i = 0; i < numReadouts; i++ )
    {
        Canvas.SetPos(1,Scroll + i * 128);
        ScrollCounter++;
	if(ScrollCounter == ScrollSpeed)
	{
		Scroll--;
		ScrollCounter = 0;
	}
	if ( Scroll < -128 )
	{
            Scroll = 0;
	}
        Canvas.DrawIcon(Texture'ReadoutA', 1.0);
    }
}
function float RateSelf( out int bUseAltMode )
{
    local Pawn P, E;
    local Bot O;

    O = Bot(Owner);
    if ( (O == None) || (AmmoType.AmmoAmount <=0) || (O.Enemy == None) )
        return -2;

    bUseAltMode = 0;
    E = O.Enemy;

    for ( P=Level.PawnList; P!=None; P=P.NextPawn )
        if ( P.bIsPlayer && (P != O) && (P != E)
            && (!Level.Game.bTeamGame || (O.PlayerReplicationInfo.Team != P.PlayerReplicationInfo.Team))
            && (VSize(E.Location - P.Location) < 650)
            && (!Level.Game.IsA('TeamGamePlus') || TeamGamePlus(Level.Game).PriorityObjective(O) < 2)
            && FastTrace(P.Location, E.Location) )
        {
            if ( VSize(E.Location - O.Location) > 500 )
                return 2.0;
            else
                return 1.0;
        }

    return 0.35;
}

function float SuggestAttackStyle()
{
    return -1.0;
}

simulated function PlayFiring()
{
    PlayAnim( 'Fire', 0.3 );
    PlayOwnedSound(FireSound, SLOT_None,4.0*Pawn(Owner).SoundDampening);
    BroadcastLocalizedMessage( class'DeemerFiredMessage',,, None, None );
}

function setHand(float Hand)
{
    if ( Hand == 2 )
    {
        bHideWeapon = true;
        return;
    }
    else
        bHideWeapon = false;

    PlayerViewOffset.Y = Default.PlayerViewOffset.Y;
    PlayerViewOffset.X = Default.PlayerViewOffset.X;
    PlayerViewOffset.Z = Default.PlayerViewOffset.Z;

    PlayerViewOffset *= 100;
}

function AltFire( float Value )
{
    if ( !Owner.IsA('PlayerPawn') )
    {
        Fire(Value);
        return;
    }

    if (AmmoType.UseAmmo(1))
    {
        BroadcastLocalizedMessage( class'DeemerFiredMessage',,, None, None );
        PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert);
        bPointing=True;
        Pawn(Owner).PlayRecoil(FiringSpeed);
        PlayFiring();
        GuidedShell = MH2GuidedWarShell(ProjectileFire(AltProjectileClass, ProjectileSpeed, bWarnTarget));
        GuidedShell.SetOwner(Owner);
        PlayerPawn(Owner).ViewTarget = GuidedShell;
        GuidedShell.Guider = PlayerPawn(Owner);
        ClientAltFire(0);
        GotoState('Guiding');
    }
}

simulated function bool ClientAltFire( float Value )
{
    if ( bCanClientFire && ((Role == ROLE_Authority) || (AmmoType == None) || (AmmoType.AmmoAmount > 0)) )
    {
        if ( Affector != None )
            Affector.FireEffect();
        PlayOwnedSound(FireSound, SLOT_None,4.0*Pawn(Owner).SoundDampening);
        return true;
    }
    return false;
}

State Guiding
{
    function Fire ( float Value )
    {
        if ( !bCanFire )
            return;
        if ( GuidedShell != None )
            GuidedShell.Explode(GuidedShell.Location,Vect(0,0,1));
        bCanClientFire = true;

        GotoState('Finishing');
    }

    function AltFire ( float Value )
    {
        Fire(Value);
    }

    function BeginState()
    {
        Scroll = 0;
        bGuiding = true;
        bCanFire = false;
        if ( Owner.IsA('PlayerPawn') )
        {
            GuidingPawn = PlayerPawn(Owner);
            StartRotation = PlayerPawn(Owner).ViewRotation;
            PlayerPawn(Owner).ClientAdjustGlow(-0.2,vect(200,0,0));
        }
    }

    function EndState()
    {
        bGuiding = false;
        if ( GuidingPawn != None )
        {
            GuidingPawn.ClientAdjustGlow(0.2,vect(-200,0,0));
            GuidingPawn.ClientSetRotation(StartRotation);
            GuidingPawn = None;
        }
    }


Begin:
    Sleep(1.0);
    bCanFire = true;
}

State Finishing
{
    ignores Fire, AltFire;

    function BeginState()
    {
        bShowStatic = true;
    }

Begin:
    Sleep(0.3);
    bShowStatic = false;
    Sleep(1.0);
    GotoState('Idle');
}

defaultproperties
{
    ScrollSpeed=3
    WeaponDescription="Classification: Thermonuclear Device"
    InstFlash=-0.40
    InstFog=(X=950.00,Y=650.00,Z=290.00),
    AmmoName=Class'MH2WarShellAmmo'
    ReloadCount=1
    PickupAmmoCount=1
    bWarnTarget=True
    bAltWarnTarget=True
    bSplashDamage=True
    bSpecialIcon=True
    FiringSpeed=1.00
    FireOffset=(X=18.00,Y=0.00,Z=-10.00),
    ProjectileClass=Class'MH2WarShell'
    AltProjectileClass=Class'MH2GuidedWarShell'
    shakemag=350.00
    shaketime=0.20
    shakevert=7.50
    AIRating=1.00
    RefireRate=0.25
    AltRefireRate=0.25
    FireSound=Sound'umdeemershot'
    SelectSound=Sound'redeemer_change'
    DeathMessage="%o was vaporized by %k's %w!!"
    NameColor=(R=255,G=128,B=128,A=0),
    AutoSwitchPriority=10
    InventoryGroup=10
    PickupMessage="You got the UK Redeemer."
    ItemName="MH2 Redeemer"
    RespawnTime=60.00
    PlayerViewOffset=(X=1.80,Y=1.00,Z=-1.89),
    PlayerViewMesh=LodMesh'Botpack.WarHead'
    BobDamping=0.98
    PickupViewMesh=LodMesh'Botpack.WHPick'
    ThirdPersonMesh=LodMesh'Botpack.WHHand'
    StatusIcon=Texture'Botpack.Icons.UseWarH'
    PickupSound=Sound'redeemer_change'
    Icon=Texture'Botpack.Icons.UseWarH'
    Mesh=LodMesh'Botpack.WHPick'
    bNoSmooth=False
    CollisionRadius=45.00
    CollisionHeight=23.00
}
 
Image



Letylove49 aka Alicia
Letylove49
Adept
Posts: 277
Joined: Tue Feb 28, 2012 7:47 pm
Location: suisse

Re: Need help for Display the Missile of MH2Reedemer

Post by Letylove49 »

Masterkent wrote: Tue Dec 13, 2022 10:58 am Where do you assign projectile's Mesh?

Code: Select all

 class MH2WarShell extends Projectile config(MonsterHunt2GoldUK);

#exec mesh import mesh=deemah1 anivfile=Models\deemah1_a.3d datafile=Models\deemah1_d.3d x=0 y=0 z=0 mlod=0
#exec mesh origin mesh=deemah1 x=0 y=0 z=0
#exec mesh sequence mesh=deemah1 seq=All startframe=0 numframes=1

#exec meshmap new meshmap=deemah1 mesh=deemah1
#exec meshmap scale meshmap=deemah1 x=0.08607 y=0.08607 z=0.17214

#exec TEXTURE IMPORT NAME=RDMR_Missile FILE=Textures\RDMR_Missile.bmp GROUP=Skins

v

Code: Select all

 defaultproperties
{
    ExplosionDecalA=Class'MH2WarShellMark'
    Damage=1000.00
    MomentumTransfer=100000
    MyDamageType=RedeemerDeath
    ExplosionDecal=Class'Botpack.NuclearMark'
    bNetTemporary=False
    RemoteRole=2
    AmbientSound=Sound'Botpack.Redeemer.WarFly'
    Mesh=LodMesh'Botpack.deemah1'
    AmbientGlow=78
    bUnlit=True
    MultiSkins=Texture'Skins.RDMR_Missile'
    SoundRadius=100
    SoundVolume=255
    CollisionRadius=7.00
    CollisionHeight=4.00
    bProjTarget=True
    bFixedRotationDir=True
    RotationRate=(Pitch=0,Yaw=0,Roll=20000),
}

i have added this : Mesh=LodMesh'Botpack.deemah1' but that still don't work.
Image



Letylove49 aka Alicia
Letylove49
Adept
Posts: 277
Joined: Tue Feb 28, 2012 7:47 pm
Location: suisse

Re: Need help for Display the Missile of MH2Reedemer

Post by Letylove49 »

i have fund the problem

Code: Select all

defaultproperties
{
     ExplosionDecalA=Class'MonsterHunt2GoldUK.MH2WarShellMark'
     Damage=1000.000000
     MomentumTransfer=100000
     MyDamageType=RedeemerDeath
     ExplosionDecal=Class'Botpack.NuclearMark'
     bNetTemporary=False
     RemoteRole=ROLE_SimulatedProxy
     AmbientSound=Sound'Botpack.Redeemer.WarFly'
     Mesh=Mesh'MonsterHunt2GoldUK.deemah1'
     AmbientGlow=78
     bUnlit=True
     MultiSkins(0)=Texture'MonsterHunt2GoldUK.Skins.RDMR_Missile'
     SoundRadius=100
     SoundVolume=255
     CollisionRadius=7.000000
     CollisionHeight=4.000000
     bProjTarget=True
     bFixedRotationDir=True
     RotationRate=(Roll=20000)


 

Code: Select all

 'MonsterHunt2GoldUK.Skins.RDMR_Missile' 
the MonsterHuntGoldUK was missing
Image



Letylove49 aka Alicia
Eternity
Skilled
Posts: 172
Joined: Sat Nov 30, 2019 10:56 pm

Re: [Solved] Need help for Display the Missile of MH2Reedemer

Post by Eternity »

IIRC enums didn't work properly in defaultproperties if specified as number...
Some tools (such as WOTgrealExporter) can't decompile enums in defaultproperties properly (in u-package it is always stored as bin data, not as text).
User avatar
EvilGrins
Godlike
Posts: 9683
Joined: Thu Jun 30, 2011 8:12 pm
Personal rank: God of Fudge
Location: Palo Alto, CA

Re: [Solved] Need help for Display the Missile of MH2Reedemer

Post by EvilGrins »

I can see the redeemer in the picture, just the rocket thrust but still.

If you really want to see if it can be seen, launch the transloc somewhere off to the side halfway to where you're shooting, back up a ways, launch the redeemer, teleport, then watch it as it's passing by.
http://unreal-games.livejournal.com/
Image
medor wrote:Replace Skaarj with EvilGrins :mrgreen:
Smilies · viewtopic.php?f=8&t=13758
Letylove49
Adept
Posts: 277
Joined: Tue Feb 28, 2012 7:47 pm
Location: suisse

Re: [Solved] Need help for Display the Missile of MH2Reedemer

Post by Letylove49 »

EvilGrins wrote: Sat Jan 07, 2023 7:31 am I can see the redeemer in the picture, just the rocket thrust but still.

If you really want to see if it can be seen, launch the transloc somewhere off to the side halfway to where you're shooting, back up a ways, launch the redeemer, teleport, then watch it as it's passing by.
thanks
i have alredy fixed it : look the screenshot:
Shot00088.png
You do not have the required permissions to view the files attached to this post.
Image



Letylove49 aka Alicia