• Welcome to Freedom Reborn Archive.
 

Upward knockback not working right?

Started by HumanTon, January 16, 2008, 07:18:02 PM

Previous topic - Next topic

HumanTon

I was just testing a thug I created with a punch that did upward knockback. If the thug attacked certain heroes the power worked fine: sometimes when he hit that hero the hero went reeling into the air.

But when the thug attacked some other, different heroes, the upward knockback never seemed to work. (And no, those heroes didn't have Density Control.)

Anyone ever see anything similar.

(You can get around it by using a Throw FFX swap, by the way.)

stumpy

How heavy were the targets? That's a factor. Did normal KB attacks work on them? I don't exactly recall anything special about the upward KB attacks.

Make sure that the target characters don't have any other attributes that change how they react to KB. I think ROOTED is one, and there may be others...

One useful test might be run the thug against a single one of your un-uKB-able heroes, you controlling the thug, the hero on the "enemies" list. Have your uKB thug hit him with that attack. Then pause the game right away after he hits! Then enter the following lines, one at a time, at the game console
target = getAllBaddies()[0]
print 'target is %s (%s, %s)' % (target,Object_GetTemplate(target),GetCharacterData(target).get('charName'))
print 'target mass is %f' % Object_GetAttr(target,'mass')
print 'target minForce is %f' % Object_GetAttr(target,'minForce')

Post your whole script.log here. Then, open ff.log and post the last couple lines that contain Damage:(hero_0). (That is, go to the bottom of the file and search up for Damage:(hero_0), there should be a couple lines close to each other that contain that string.)

HumanTon

The heroes are all flesh, 170 pounds. I'll try the console thing tonight.

HumanTon

Hmmm, when I try it the console likes

target = getAllBaddies()[0]


just fine but when I try

print 'target is %s (%s, %s)' %

it says "Syntax Error Unexpected EOF while parsing"

stumpy

Ha. Sorry. I should have thought that might happen. That line and the next one are one single line that got wrapped by your browser. There are only four lines total. I'll change the quote tags to code tags like I should have in the first place.

HumanTon

I've fooled around with it a bit more, and think I have a better understanding of what it's doing, if not why.

What I'm trying to make is a thug that can knock/throw a (flesh) hero off his feet ... but just by a little bit. I'm not looking to send the hero to the moon. So I had the thug setup as follows: Strength of 3, with the power itself doing Low Crushing damage, with knockback set to High and Upward Knockback checked.

It turns out that with these settings the thug will knock the hero up, but only the first time he uses the power. On subsequent attacks using the power you never see knockback.

I'm pretty sure this has to do with the power values being juuuuust on the edge of what's needed to cause knockback: if I increase the thug's Strength to 4, or the Knockback to Extreme, then the upward knockback works reliably, 100% of the time (but gives me more knockback than I really want.)

I think the reason I was seeing the knockback on one hero mesh and not the other is that one hero was less agile than the others, so he always got hit the first time out. The other guys dodged the first blow, and for whatever mysterious reason the knockback stopped working after that.

Moral of the story: if you want a hero with low Strength to do something similar--e.g. Black Canary to do a judo throw--consider using a Throw power swap instead of Upward Knockback.


HumanTon

OK, so I collected the log data you mentioned.

Here's script.log:

[spoiler]>>> system/init.py executed
>>> system/localinit.py executed
>>> system\tredir.py executed
loading datfiles version 0.251000
loading cshelper ...
Starting ffx.py v. 3.2.0 build 11; branch = Gold / Release
Loading m25ai.py v. 3.2.0 build 10; branch = beta 2: m25 branch 2
importing missionobjvar.py v1.18
importing MLOG Reader 1.0.18 release
Starting General Utilities 1.0
missionobjvar(FixLongs): Fixing overflow issue with <SCSTATE_BUOYANT>
missionobjvar defining functions for Campaign play.
CustomHeadCurrentTime 1200624048.429000
Starting Height Check module 1.4
Starting System Utilities 1.4
OBJECTS_HEIGHT: 604 entries
NIF_OBJECTS: 482 entries
BUILDINGS_IN_OBJECTS_DAT: 30 entries
BUILDING_DIMENSIONS: 30 entries
Starting skXMapInfo.py  v 0.79 beta
skXMapInfo: m25ai available
FFX Mission Plugin 'firehydrant' imported
FFX Mission Plugin 'zombie' imported
Loading freeroam_keepbuildingdamage.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'freeroam_keepbuildingdamage' imported
FFX Mission Plugin 'm25ai_lowjumper' imported
FFX Mission Plugin 'm25ai_realitymanipulation' imported
FFX Mission Plugin 'cutscene_power' imported
Loading m25freeroam.py v. 3.2.0 build 7; branch = m25 branch 1
FFX Mission Plugin 'm25encexit' imported
Loading     m25enc_OPENDOOR.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'm25enc_opendoor' imported
FFX Mission Plugin 'm25enc_reqchar' imported
Loading     m25enc_simplechoice.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'm25enc_simplechoice' imported
Starting Built-In Function Wrapper 1.5
('Object_CalcPrestige', 'js')
sk: missionobjvar already loaded; resetting mission type to skirmish for mission and object vars
missionobjvar.SetFunctionsByMissionType: isCampaignMission=0, long variable cache has already been written to.
__MISSIONVARS = {'_event_freeroam_initmission': [['FreeroamKBD_StartMission', 0]], '_event_pstory_cutsceneline': [['CutscenePower_CheckPower', 1]], 'heightcheck_sampling_default': (1, 8), '_event_freeroam_exitmission': [['FreeroamKBD_EndMission', 0]]}
__OBJECTVARS = {}
missionobjvar defining functions for Rumble Room play.
ffx3\sk.py importing FFX
ffx3\missions\scripts\sk.py loaded
>>> C:\Documents and Settings\cmiles\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\battle.py executed
>>> C:\Documents and Settings\cmiles\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\danger.py executed
>>> C:\Documents and Settings\cmiles\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\battle.py executed
>>> OnReceiveSelectedEnemies(('custom_vil_0', ))
try to spawn custom_vil_0
sk.SpawnEnemy: energy for _skcustom_vil_001 (ha rebound) changed from 9 to 2
MLOG_Init(keepRunningModules=0): starting up
mlogreader.MLOG_Init: current mission = 'MP_CITY'
initialising FFX: skirmish=1
numberStr=46
storing hero_0: id_1,-46
! GetMapInfo
initialising FFQ_initialiseExtras()
FFX_UpdateSun: getting default sun
FFX_UpdateSun: setting = (-140.0, 70.0, 1.0, 0.800000011921, (0.699999988079, 0.600000023842, 0.600000023842))
addArrow _sk_arrow _skcustom_vil_001 0 0
initAttribsForChar: working on _skcustom_vil_001 (ha rebound)
initAttribsForChar (ha rebound): looking at attribute heroic
initAttribsForChar (ha rebound): looking at attribute painresponse
execInitAttrib: init painresponse attribute
    on _skcustom_vil_001 of template custom_vil_0 (ha rebound)
initAttribsForChar (ha rebound): looking at attribute boost1
execInitAttrib: init boost1 attribute
    on _skcustom_vil_001 of template custom_vil_0 (ha rebound)
initAttribsForChar (ha rebound): looking at attribute jumper
initAttribsForChar: working on hero_0 (vt bruiser)
initAttribsForChar (vt bruiser): looking at attribute nimble
initAttribsForChar (vt bruiser): looking at attribute fearless
execInitAttrib: init fearless attribute
    on hero_0 of template custom_template_46 (vt bruiser)
Plugin 'firehydrant' OnPostInit() called
Plugin 'zombie' has no OnPostInit()
Plugin 'freeroam_keepbuildingdamage' OnPostInit() called
Plugin 'm25ai_lowjumper' has no OnPostInit()
Plugin 'm25ai_realitymanipulation' has no OnPostInit()
Plugin 'cutscene_power' has no OnPostInit()
Plugin 'm25encexit' has no OnPostInit()
Plugin 'm25enc_opendoor' has no OnPostInit()
Plugin 'm25enc_reqchar' has no OnPostInit()
Plugin 'm25enc_simplechoice' has no OnPostInit()
strengthThroughPain: attackBonus=1
setting off timer
>>> target = getAllBaddies()[0]
  File "<string>", line 1
    target = getAllBaddies()[0]
    ^
SyntaxError: invalid syntax
>>> target = getAllBaddies()[0]
>>> print 'target is %s (%s, %s)' % (target,Object_GetTemplate(target),GetCharacterData(target).get('charName'))
  File "<string>", line 1
    print 'target is %s (%s, %s)' % (target,Object_GetTemplate(target),GetCharacterData(target).get('charName'))
    ^
SyntaxError: invalid syntax
>>> print 'target is %s (%s, %s)' % (target,Object_GetTemplate(target),GetCharacterData(target).get('charName'))
target is _skcustom_vil_001 (custom_vil_0, ha rebound)
>>> print 'target mass is %f' % Object_GetAttr(target,'mass')
  File "<string>", line 1
    print 'target mass is %f' % Object_GetAttr(target,'mass')
    ^
SyntaxError: invalid syntax
>>> print 'target mass is %f' % Object_GetAttr(target,'mass')
target mass is 80.000000
>>> print 'target minForce is %f' % Object_GetAttr(target,'minForce')
target minForce is 8000.000000
[/spoiler]

And here's the data from ff.log:

00:02:59.44: FF: Damage:(hero_0)  _skcustom_vil_001 (calc pwr)dmg: 5, stun pct: 0, KB: 3600
00:02:59.44: FF: Damage:(hero_0)  (resolve) dmg: 4, stun time: 0, KB: 2917


So yeah, there just isn't enough KB in that particular case to do the job.

stumpy

Right. You probably want higher magnitude KB or buy the power at a higher level. The nominal KB at that setting is 3600 and the game adds some randomness to it. But that opponent won't feel anything under 8000.