I want to do some in-depth testing

Posts
33
Likes
1
I want to know exact values such as each weapons’ fire rate, how fast fp and bp replenish etc.
I think I can figure them out if I can use the “wait” command and know how to spawn npc’s with low health, as well as commands to kill/damage npc’s without attacking them.

Is there any way, to, say, use the “wait” command on private/local servers?
 

Puppytine

Slayed dreamer
Posts
2,237
Likes
1,487
Is there any way, to, say, use the “wait” command on private/local servers?
You can use it on any server you like.
Just don't try to use it from console -- use config files instead.

But I fail to see how /wait command can be useful for you.
It's standard, unaltered Jedi Academy command, which freezes any user input until it ends. You won't be able to use mouse and keyboard while /wait is executing.
More over, it does operate with frames, not milliseconds.
So, executing
Code:
wait 300
will freeze command query for 300 frames.
Therefore, results of /wait depends on performance of a hardware.
I am sure you can find the values somewhere within .pk3 files, no?
No.
Most of them hard-coded.
Sometimes, devs post those values on these forums, but it's pretty sporadic and not complete, even remotely. Many such replies are already outdated.
To get some values, it's necessary to read a lot of forums posts, including changelogs.
 
Posts
33
Likes
1
I thought “wait” command went based on game ticks...

Anyway, I do always have well above 60 FPS, so I can just set a FPS cap. That way, each second will have the same number of FPS while I’m testing. Will that work at all?
 

GoodOl'Ben

Nerd
Donator
Movie Battles II Team Retired
Posts
1,116
Likes
1,656
Sometimes, devs post those values on these forums, but it's pretty sporadic and not complete, even remotely. Many such replies are already outdated.
To get some values, it's necessary to read a lot of forums posts, including changelogs.
This.

I'd love for us to have a good census of this. I once gathered up a list of them about 4 years back. Maybe I'll do it again when I have the time and put it in the Wiki so it would be easier to track.

Just to get you started with estimates:

E11: Primary 26 (might be 28 at lvl3), Secondary 24
Clone Rifle: 20(ish, might be 22 or 24 at most)
T21: Primary 60(ish), Secondary 30
A280/DLT20a: 28
Clone Pistols: 28 (charge only increases amount of bounces, no dmg boost)
Westar Pistols: 26 (might be 28) (fully charged deals about 3-4x)
Projectile Rifle: 150
Disruptor Rifle: 30 -> a slight curved charge function with 150 max dmg
Bowcaster: 40(ish), fully charged deals about 3-4x
EE3: Unscoped 28, Scoped 100
Westar M5: Unscoped 24, Scoped 60(ish)
SBD: 30(ish, damage might still depend on amount of battery)
Standard Pistol: 26 (fully charged max damage is approx 4x)
Pistol 3: 40(ish, fully charged max is approx 4x)
Droideka: 30(ish)
Frag Grenades/Rockets: Base damage 150(ish), degrades towards the edges
Thermal Detonator: 400(ish), degrades towards the edges, a wookiee with Health 3 can survive

Each weapon has a unique Force Drain multiplier applied to them when dealing FP damage.
Weapons that scale extra well relative to their base damage:
  • Westar M5
  • Pistol 3
  • Clone Pistols
  • Westar pistols
  • Droideka
Generally anything at 28 or above base damage will deal a heavy impact to FP. Anything below will feel much lighter.

Rate of fire approximation:
  • Droideka Firepower 3
  • Clone Rifle 3, SBD Firepower 3
  • T21 secondary, E11 secondary, Clone Rifle 2, Westar 3, Clone Pistol 3, Bowcaster 3, SBD Firepower 2, M5 noscope
  • A280, DLT20a, E11 primary, EE3, M5 scoped, Clone Rifle 1, SBD Firepower 1
  • Bowcaster 1-2, Pistol 1-3
There is a general rule of Steady Shot which means you are accurate when walking/crouching/standing:
  • E11: Steady shot, average spread when running, Level 2 secondary fire always spreads
  • EE3: Non-sniper mode's first 2-3 shots always accurate, then accuracy degrades per shot, sniper mode has steady shot that is also applied when mando is "standing" while flying
  • Westar M5: Level 1 steady shot, level 2 always accurate. Scoped is steady shot, with the exception of Dexterity 3 giving it perfect accuracy while performing acrobatics
  • All pistols: Always accurate
  • Bowcaster: Steady shot
  • T21: Only accurate while standing still
  • Clone Rifle: Only accurate while standing still
  • Droideka: Always accurate
  • SBD: Steady shot
  • Disruptor: Always accurate
  • Projectile Rifle: Only accurate while standing still
  • A280: Level 1 only accurate while standing still, Level 2+ steady shot
  • DLT20a: Only accurate while standing still
Generally the accuracy spread is pretty heavy duty. Generally the slower you move, the more accurate you are. Some weapons are surprisingly accurate while running (Bowcaster 3, Clone Rifle, T21)

Location damage multipliers are roughly as follows:
  • Head: 3x
  • Chest: 2x
  • Arms: 1.25x
  • Waist: 1x
  • Legs: 0.75x
Hope this helps a bit.
 

Puppytine

Slayed dreamer
Posts
2,237
Likes
1,487
I thought “wait” command went based on game ticks...

Anyway, I do always have well above 60 FPS, so I can just set a FPS cap. That way, each second will have the same number of FPS while I’m testing. Will that work at all?
Oops, in fact, I don't know the difference between game ticks and frames. I didn't research JA source code that much.
But I stand my point: duration of /wait isn't tied to real time, it's tied to internal engine cycles, whether are those cycles frames or not.
So you'd better perform those tests on your own, I'm not sure what results will be.

Also, as I said, all the input is blocked while /wait is executing.
 
Posts
216
Likes
83
I would love some up-to-date information on FP drains for each gun and the IDR and such
 

Tempest

Gameplay Design
Movie Battles II Team
Posts
731
Likes
1,104
To update on damages (taken from earlier this week? when I was looking through the weapons in my FP cleanup):
general:
pistol (<p3 primary): 26
pistol (<p3 charge): 28+
pistol (p3): 40
E11 (primary): 28
E11 (secondary): 24
shotgun: 18

rebs:
clone rifle: 20
bowcaster: 30
a280 (primary): 30
a280 (burst): 30
arc rifle (baseline): 24
arc rifle (sniper): 47
arc pistols: 28

imps:
t21 (primary): 60
t21 (secondary): 28
SBD: 18 + (battery amount / 10); this is base of 28 at full battery
deka: 25
mando pistols: 28
wrist laser: 50
ee3 (baseline): 28
ee3 (sniper): 100
disruptor (primary): 40
disruptor (alt-tap): 28
Didn't include Disruptor/Bowcaster charging damage because of math/changes to scaling, respectively. Also looking at adjusting pistol's charge scaling but that's a lot less..hectic than the previous two mentioned.

Also, FP drain stuff is....finicky to say the least...Will edit it in once I'm done dissecting it.
 
Last edited:

Tempest

Gameplay Design
Movie Battles II Team
Posts
731
Likes
1,104
Actually instead of editing it in, I'm gonna post it separately since it's likely to be quite big on its own (even more of a wall of text than the SBD/damage stuff I posted in a different thread). Also so I can tag @GoodOl'Ben since editing in mentions doesn't like to behave.

FP drain logic:
Variables:
  • Attacker
  • Self (the one being shot)
  • "point" (being where the shot hit in the world)
  • origin point (where the shot started in the world)
  • flags
  • mod (as mentioned in my SBD stuff, this is method of death; basically a tag/identifier that ties to the weapons)
  • projectile (boolean that tells whether it's an actual projectile or not; could be disruptor/hitscan stuff from FA and so on)
  • damage - damage of the projectile (this is going to start as the base damage listed in my prior post)
  • "shotsaber" - for modifying behavior depending on if the actual saber itself is shot or if it's the body of Self (e.g. flinch only triggers if you actually hit the body)
  • "Attacking" - checks for if Self is attacking or not for things like swingblock and other modifiers
  • Distance - Distance between point and origin point.
  • Outside IDR: Distance is greater than 410
  • Inside Medium IDR: Distance is > 160 and <= 410
  • Inside Close IDR: Distance <= 160

First things to be done:
- Get distance from Attacker to Self (mainly for IDR)
- Saber defense level

Second:
- Let's check if the damage is above a specific (55) threshhold (not sure why but okay!)

- Initial FP drain is (damage / 10 + 0.5 (to prevent rounding errors since it's mixing ints with decimal values)).
- Check what weapon it is:
  • Disruptor: Initial FP drain * 3.0f+ 0.5
  • Bowcaster: Initial FP drain * 1.5 + 0.5
  • Deka: Initial FP drain * 1.0 + 0.5
  • Clone Rifle: Initial FP drain * 1.52 + 0.5
  • Pistol: Initial FP drain * 1.1 + 0.5
  • Westars: Initial FP drain * 1.5 + 0.5
  • SBD: Initial FP drain * 1.11 + 0.5
  • ARC pistols: Initial FP drain * 1.5 + 0.5
  • M5: Initial FP drain * 2.4 + 0.5
  • M5 Sniper: Initial FP drain * 2.0 + 0.5
  • A280 (primary): Initial FP drain * 1.5 + 0.5
  • A280 (burst?): Initial FP drain * 1.5 + 0.5
  • T21 (primary): Initial FP drain * 1.5 + 0.5
  • T21 (alt fire): Initial FP drain * 1.15 + 0.5
  • Shotgun: Initial FP drain * 1.44 + 0.5
  • E11: Initial FP drain * 1.516 + 0.5
  • Wrist Laser: Initial FP drain * 1.9 + 0.5
- Check what weapon it is:
  • Bowcaster (charged): Initial FP drain * (damage / 10.0 * 1.5 + 0.5)
  • T21: Initial FP drain * (damage / 10.0 * 1.5 + 0.5)
  • Disruptor: Initial FP drain * (damage / 12.0 + 0.5)
  • Anything else: Initial FP drain * (damage / 4.0 + 0.5)
After seeing what weapon is being shot and whatnot, we modify the FP drains depending on whether or not the person being shot is blocking or not.
Outside IDR:
- If mod is Deka, T21, charged Bowcaster, Wrist Laser, Pistol (with damage > 30), or charged Pistol (with damage > 30), Current FP drain total = Initial FP drain * 1.8 + 0.5.
- Any other mod, Current FP drain total = Initial FP drain * 0.8 + 0.5.

Inside Medium IDR:
Code:
           float a = 0;
           float b = 0;
           float fDrainBasedOnDist = 0;
     
           a = (0.8f - 2.3f)/(410 - 160);
           b = (410*2.3f - 160*0.8f)/(410 - 160);
           fDrainBasedOnDist = a*(Distance) + b;

           New FP drain total = (Current FP drain total * fDrainBasedOnDist + 0.5f)
Inside Close IDR:
  • New FP drain total = Current FP drain total * 2.3f + 0.5f
Outside IDR:
  • New FP drain total = Current FP drain total * 2.0 + 0.5
Inside Medium IDR:
Code:
           float a = 0;
           float b = 0;
           float fDrainBasedOnDist = 0;
     
           a = (2.0f - 3.0f) / (410 - 160);
           b = (410*3.0f - 160*2.0f)/(410 - 160);
           fDrainBasedOnDist = a*(Distance) + b;

           New FP drain total = Current FP drain total * fDrainBasedOnDist + 0.5f
Inside Close IDR:
  • New FP drain total = Current FP drain total * 3.0 + 0.5
For clarity's sake, I'll refer to whatever accumulated value as "FP drain" from here on. All math has a 0.5 added to the rest of it as well.

Once we're past all that fun IDR stuff, it's time to look at various modifiers! Checked and applied in the following order:
  • If the saber was off and is now mid-activation, FP drain is multiplied by 1.8.
  • If Self has < level 3 saber defense AND is attacking AND is blocking (swingblocking during an attack), FP drain is multiplied by 2.0.
  • If Self has Q3 (FA only currently) AND Self has < level 3 defense AND (Attacking AND not blocking) OR Self is in a getup, FP drain is multiplied by 2.0.
  • If Self is jumping, FP drain is multiplied by 1.7
  • If Self has no saber defense, FP drain is multiplied by 3.0.
  • If Self has level 1 saber defense, FP drain is multiplied by 1.6
  • If Self is in a special move, FP drain is multiplied by 0.5 (cut in half)
  • If Self is blocking, FP drain is multiplied by 0.5 (cut in half)
  • If Self isn't blocking, FP drain is multiplied by 1.2
And lastly, caps on FP drains!
  • If Self is holding block and FP drain is currently > 35, set FP drain to 35
  • If Self isn't blocking and FP drain is currently > 50, set FP drain to 50
Fun times!
 
Last edited:
Posts
216
Likes
83
Oh my god thank you so much tempest this is gonna be so useful

EDIT:This needs to be in a wiki or something!! essential information for gunners

EDIT2: Perhaps after its cleaned up.. and translated to english

is there nothing on deflect? and why are the caps so low 35 fp drain max while blocking:eek:
 
Last edited:
Posts
33
Likes
1
Alright, down to business. Is there any way to spawn a bot which just stands still? I don’t need it to do anything other than serve as a dummy, and must give a notification such as “Don’t attack teammates” when I shoot it. I also need a command to kill the bot (like, “kill bot” or something).

The plan is:
Spawn bot
Use command: “+attack; wait 10; kill bot”

If I get the “Don’t attack teammates” notification, I know that from that distance, my shots take under 10 ticks to reach the target. If I don’t get the notification, that means the bot died before the shot reached it, so the shot took more than 10 ticks to reach the target from that distance.

Without the above information, I can’t think of any other way to test each weapon’s projectile velocities.
 

Puppytine

Slayed dreamer
Posts
2,237
Likes
1,487
Commands Guide

It seems that “wait” command goes by milliseconds after all.
Yes, it's said "milliseconds", but I believe it's just incorrect.
I've got an impression that /wait is tied to frames basing on what I did read from JA source code on github.
I may be wrong, though; People who are far more familiar with the engine, like @ent or @eezstreet, can correct me if I'm not right.
 
Posts
33
Likes
1
Alright, down to business. Is there any way to spawn a bot which just stands still? I don’t need it to do anything other than serve as a dummy, and must give a notification such as “Don’t attack teammates” when I shoot it. I also need a command to kill the bot (like, “kill bot” or something).

The plan is:
Spawn bot
Use command: “+attack; wait 10; kill bot”

If I get the “Don’t attack teammates” notification, I know that from that distance, my shots take under 10 ticks to reach the target. If I don’t get the notification, that means the bot died before the shot reached it, so the shot took more than 10 ticks to reach the target from that distance.

Without the above information, I can’t think of any other way to test each weapon’s projectile velocities.
Anyway, anyone know which commands I use for the above?
 

ent

Movie Battles II Team
Posts
848
Likes
390
Yes, it's said "milliseconds", but I believe it's just incorrect.
I've got an impression that /wait is tied to frames basing on what I did read from JA source code on github.
I may be wrong, though; People who are far more familiar with the engine, like @ent or @eezstreet, can correct me if I'm not right.
jediacademy/cmd_common.cpp at master · jedis/jediacademy · GitHub
jediacademy/cmd_common.cpp at master · jedis/jediacademy · GitHub
Delays frames.
Personally I thought it delays in msec, but the myth is busted.
P.S:. Actually it gets delayed by the amount of calls of Cbuf_Execute but cases where the game calls that function internally multiple times aims to zero.
 
Last edited:
Top