• Please make sure you are familiar with the forum rules. You can find them here: https://forums.tripwireinteractive.com/index.php?threads/forum-rules.2334636/

Alot of NICE feats for UT99!?!

Status
Not open for further replies.
Thanks, Beppo. Actually you are right. It will be nice to have bullet deformation but it is not so important for a basic penetration system.
I find the idea with the footsteps sound great. :)

Footsteps sound is one way. You could also use other properties for textures available in Unreal 2.5 that were not there in Unreal 1. On specifies if the material type is concrete, wood, metal, etc.

Just to name another possibility for material support.

btw.. there is no cone of fire in RO.

Yes there is. See ROProjectileFire class and childrens.

ROProjectileFire.DoFireEffect() clearly has random error adjustement on firing depending on the conditions. Works along with ROProjectileFire.CalcSpreadModifiers() calculating random spread error factors depending on the player stance and situation.

Zell said:
Penetration for tank shells is different, because there's only one tank shell fired every 30 or so seconds, whereas there are a whole lot more bullets in play and it gets real complicated.

No, it doesn't get more complicated at all. You assume the load will be to important due to the number of bullet fired when in fact the number of bullets fired in RO is fairly small. Penetration can be done very efficiently with much denser fire fights.
 
Upvote 0
You are right, at some time we had easily 32 players in INF, but I do not remember exactly what was implemented in these version. I know as much as basic external ballistic and perhaps penetration. Not sure though, that's why I prefered mentionning the current version conditons. But I did fill a P3 800 with a server and 16 bots. And it didn't even top the CPU.

well i played the game for years and i know for a fact we had full penetration (and one penetration bug) on 32 player servers including full balistics and i think the bullet was even somewhat deflected after it got out of a wall on the other side aswell. and thats with most people having a 900RPM or higher gun in their hands.
 
Last edited:
Upvote 0
...

See ROProjectileFire class and childrens.

ROProjectileFire.DoFireEffect() clearly has random error adjustement on firing depending on the conditions. Works along with ROProjectileFire.CalcSpreadModifiers() calculating random spread error factors depending on the player stance and situation.

...

Hmm .. I've seen the code and I've seen how the spread modifiers are computed, wich makes me worry alittle about the possibility that ro is using some kind of cone of fire.

Now, If the new computed vector(spread) is also linked with the weapon tip, so that the weapon is pointing all the time to the random vector where the bulled will be spawned I would not call it cone of fire.
I would call it sway.
But if the weapon is pointing to a direction and the projectile is spawning to a rand vector it will be cone of fire.

I have not studied the code to see if the weapon direction is adjusted.

What is really wondering me is that FRand() call in .DoFireEffect() method.
 
Upvote 0
@Yoshiro...
what visual 'thing' do I actually have in RO to notice that my next shot will not hit where I'm aiming at? And how do you call a system that spawns its projectile at the muzzle location but is not using the actual rotation of the weapon then for the projectiles flight path? (not counting the slight error addition to get the projectiles flight paths to not always be exactly the same like they tend to in RL)


Another thing...
I do not own RO and I'm not willing to pay 25 US$ or whatever to make a mutator for your community for a game that I actually do not play... I guess that's understandable.
But if you guys can give me access to the 'SDK' (UnrealEd, ucc and all DLLs needed to edit RO in its current state) then I'm willing to try to get this mutator out the door. The game itself still lies on my HD due to me checking it out on the free weekend.
So, if someone can give me access to the 'SDK' files, then I will give it a try.

Your decision.
 
Upvote 0
Code:
[B]class ROProjectileFire extends ROWeaponFire;
[/B]...
function CalcSpreadModifiers()
{
 local float MovementPctModifier;
 local float PlayerSpeed;
 local ROPawn ROP;
    ROP = ROPawn(Instigator);
 if( ROP == none )
  return;
 PlayerSpeed = VSize(ROP.Velocity);
 /* Calc spread based on movement speed */
   MovementPctModifier = PlayerSpeed / ROP.default.GroundSpeed;
 Spread = default.Spread + default.Spread * MovementPctModifier;
 /* Reduce the spread if player is crouched and not moving */
 if( ROP.bIsCrouched && PlayerSpeed == 0 )
 {
  Spread *= CrouchSpreadModifier;
 }
 else if( ROP.bIsCrawling )
 {
  Spread *= ProneSpreadModifier;
 }
 if( ROP.bRestingWeapon )
 {
  Spread *= RestDeploySpreadModifier;
 }
 // Make the spread crazy if your jumping
 if( Instigator.Physics == PHYS_Falling )
 {
  Spread *= 500;
 }
 if( !Instigator.Weapon.bUsingSights  && !Instigator.bBipodDeployed )
 {
  Spread *= HipSpreadModifier;
 }
 if( Instigator.bBipodDeployed )
 {
  //if ( ROMGbase(ROWeaponPtr).bIsMounted )
      Spread *= BipodDeployedSpreadModifier;
     //else
     // Spread *= 2.0;
  //log("Your MG spread is "$Spread);
 }
 if( ROP.LeanAmount != 0 )
 {
  Spread *= LeanSpreadModifier;
 }
 //log("Final Spread is "$Spread);
}

function DoFireEffect()
{
...
 CalcSpreadModifiers();
 if( (ROMGBase(Owner) != none) && ROMGBase(Owner).bBarrelDamaged )
 {
  AppliedSpread = 4 * Spread;
 }
 else
 {
  AppliedSpread = Spread;
 }
    switch (SpreadStyle)
    {
        case [B]SS_Random[/B]:
            X = Vector(Aim);
            for (projectileID = 0; projectileID < SpawnCount; projectileID++)
            {
               R.Yaw = AppliedSpread * ((FRand()-0.5)/1.5);
               R.Pitch = AppliedSpread * (FRand()-0.5);
               R.Roll = AppliedSpread * (FRand()-0.5);
               SpawnProjectile(StartProj, Rotator(X >> R));
            }
            break;
        case [B]SS_Line[/B]:
            for (projectileID = 0; projectileID < SpawnCount; projectileID++)
            {
               theta = AppliedSpread*PI/32768*(projectileID - float(SpawnCount-1)/2.0);
               X.X = Cos(theta);
               X.Y = Sin(theta);
               X.Z = 0.0;
               SpawnProjectile(StartProj, Rotator(X >> Aim));
            }
            break;
        default:
            SpawnProjectile(StartProj, Aim);
    }
...
 
[B]class ROProjectileWeapon extends ROWeapon
[/B]
simulated event RenderOverlays( Canvas Canvas )
...
Well, both methods, SS_Line and SS_Random, are pretty much like what was and still is called 'cone firing' due to the weapon model not using these calculations for its rotation too. So you get no visual clue about where the projectile will go. It will go more or less randomly out of the weapons muzzle. The angle it uses then depends on factors depending on the stance and movement and stuff alike.
Still this is called cone firing, sry.
[edit] all RO firing classes do use SpreadStyle = SS_Random ...

Oh and the codes above are not telling you that I got access to the SDK. I only got access to some of the ucc files someone extracted for me, nothing more.
So I still would need ucc aso to actually compile a mutator for your community.
 
Last edited:
Upvote 0
found a little gem ;)
Code:
[B]class ROWeaponFire extends WeaponFire;[/B]
 
simulated function HandleRecoil()
{
...
       NewRecoilRotation.Pitch = RandRange( maxVerticalRecoilAngle * 0.75, maxVerticalRecoilAngle );
      NewRecoilRotation.Yaw = RandRange( maxHorizontalRecoilAngle * 0.75, maxHorizontalRecoilAngle );
       if( Rand( 2 ) == 1 )
          NewRecoilRotation.Yaw *= -1;
...
Nice to know that there is a minimal chance that my weapon recoil can go up left instead of up right ;)

[edit] just to clarify... this has nothing to do with the weapons doing it wrong. I was just a bit surprised that there is only a minimal chance for the weapon to go up left at all, nothing more.
 
Last edited:
Upvote 0
Yes, that's exactly the function I flaged on and that is exactly what I call random cone fire. Although it's behavior might be different than other so-called tactical shooter, it's still a random process involved in projectile orientation leading to "cone fire".

Once the spread factor is calculated with this function the DoFire() function uses this factor to scale a randomly generated value applied on the projectile rotation. This process lead to "cone fire". The fact that this cone moves along the orientation of the weapon is irrelevant.

EDIT: Beppo. Stop posting all those gems... I'v been holding back since yesterday ;)
 
Upvote 0
Code:
Well, both methods, SS_Line and SS_Random, are pretty much like what was and still is called 'cone firing' due to the weapon model not using these calculations for its rotation too. So you get no visual clue about where the projectile will go. It will go more or less randomly out of the weapons muzzle. The angle it uses then depends on factors depending on the stance and movement and stuff alike.
Still this is called cone firing, sry.
[edit] all RO firing classes do use SpreadStyle = SS_Random ... 

Oh and the codes above are not telling you that I got access to the SDK. I only got access to some of the ucc files someone extracted for me, nothing more.
So I still would need ucc aso to actually compile a mutator for your community.[/QUOTE]

Sorry but your little code snippet there is just a very very small part of how the weapon firing is calculated in RO. There are indeed very small randomizations used to similate such things as the inherent innaccuracy of the weapon (which every weapon has regardless of if the gun is clamped in a vice), the failure of an overheating barrel, and the steadyness of your player as a weapon platform. 

The game already uses a system where the bullets go where the muzzle of the gun is pointed (your so called vectorized aiming system) when the weapon is at the hip. This is part of our free-aim/weapon recoil system. So you absolutely get a "clue" of where the bullets will go, because they go straight out of the barrel with some minor barrel innaccuracy. Maybe next time you can look at the whole picture before jumping to conclusions and showing you don't know what your talking about :)
 
Upvote 0
Status
Not open for further replies.