Skip to content

Commit

Permalink
parser: fix some issues with v125/128 banks
Browse files Browse the repository at this point in the history
  • Loading branch information
bnnm committed Nov 9, 2020
1 parent 37961de commit 55b894d
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 9 deletions.
2 changes: 1 addition & 1 deletion wwiser/wdefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
113, #0x71 Wwise 2015.1 [Nier Automata (PC), Doom 2016 (PC), South Park: The Fractured But Whole (PC)]
118, #0x76 Wwise 2016.1 [WipEout: Omega Collection (PS4), Coffence (PC), Mario + Rabbids Kingdom Battle (Switch)]
120, #0x78 Wwise 2016.2 [Polyball (PC), Battle Chasers (PC)]
125, #0x7D Wwise 2017.1 [Devil May Cry 5 (PC)]
125, #0x7D Wwise 2017.1 [Devil May Cry 5 (PC), Wolfenstein II The New Colossus (PC)]
128, #0x80 Wwise 2017.2 [Spyro Reignited Trilogy (PC/PS4), Let's Go Pikachu (Switch), Magatsu Wahrheit (Android)]
132, #0x84 Wwise 2018.1 [Astral Chain (Switch), John Wick Hex (PC), Spyro Reignited Trilogy (Switch)]
134, #0x86 Wwise 2019.1 [Doom Eternal (PC), Girl Cafe Gun (Android)]
Expand Down
34 changes: 26 additions & 8 deletions wwiser/wparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -631,7 +631,11 @@ def CAkParameterNodeBase__SetPositioningParams(obj, cls):

#todo 3dPositioning bits depends on version
#cbPositioningInfoOverrideParent older
fld = obj.U8x('uBitsPositioning')
if cls.version <= 120:
fld = obj.U8x('uByVector')
else:
fld = obj.U8x('uBitsPositioning')

fld.bit('bPositioningInfoOverrideParent', obj.lastval, 0)
fld.bit('bHasListenerRelativeRouting', obj.lastval, 1) #has_3d
if cls.version <= 88:
Expand All @@ -643,13 +647,20 @@ def CAkParameterNodeBase__SetPositioningParams(obj, cls):
fld.bit('unknown3d', obj.lastval, 5)
fld.bit('unknown3d', obj.lastval, 6) #always set?
fld.bit('unknown3d', obj.lastval, 7) #always set?
elif cls.version <= 120:
fld.bit('unknown2d', obj.lastval, 1) #flag for next bit
fld.bit('unknown2d', obj.lastval, 2) #bPriorityOverrideParent? bIsFXOverrideParent?
fld.bit('cbIs3DPositioningAvailable', obj.lastval, 3)
elif cls.version <= 128:
pass
else:
fld.bit('unknown2d', obj.lastval, 1) #?
fld.bit('unknown2d', obj.lastval, 2) #flag for next bit
fld.bit('unknown2d', obj.lastval, 3) #bPriorityOverrideParent? bIsFXOverrideParent?
fld.bit('cbIs3DPositioningAvailable', obj.lastval, 4)
else:
fld.bit('ePannerType', obj.lastval, 2, mask=3, fmt=wdefs.AkSpeakerPanningType)
fld.bit('e3DPositionType', obj.lastval, 5, mask=3, fmt=wdefs.Ak3DPositionType)
uBitsPositioning = obj.lastval
has_positioning = (uBitsPositioning >> 0) & 1
has_positioning = (uBitsPositioning >> 0) & 1 #override parent

if has_positioning:
if cls.version <= 56: #56=KOF13
Expand Down Expand Up @@ -689,7 +700,10 @@ def CAkParameterNodeBase__SetPositioningParams(obj, cls):
uBits3d = obj.lastval

#todo bit meanings may vary more in older versions
fld.bit('eSpatializationMode', obj.lastval, 0, mask=3, fmt=wdefs.Ak3DSpatializationMode)
if cls.version <= 125:
fld.bit('eSpatializationMode', obj.lastval, 0, mask=1, fmt=wdefs.Ak3DSpatializationMode)
else:
fld.bit('eSpatializationMode', obj.lastval, 0, mask=3, fmt=wdefs.Ak3DSpatializationMode)
if cls.version <= 132:
fld.bit('bHoldEmitterPosAndOrient', obj.lastval, 3)
fld.bit('bHoldListenerOrient', obj.lastval, 4)
Expand Down Expand Up @@ -724,11 +738,15 @@ def CAkParameterNodeBase__SetPositioningParams(obj, cls):
e3DPositionType = (uBits3d >> 0) & 3
has_automation = (e3DPositionType != 1)
has_dynamic = False
elif cls.version <= 125:
e3DPositionType = (uBits3d >> 4) & 1
has_automation = (e3DPositionType != 1)
has_dynamic = False
elif cls.version <= 128:
e3DPositionType = (uBitsPositioning >> 4) & 1
e3DPositionType = (uBits3d >> 6) & 1
has_automation = (e3DPositionType != 1)
has_dynamic = False
else:
else:
e3DPositionType = (uBitsPositioning >> 5) & 3
has_automation = (e3DPositionType != 0) #(3d == 1 or 3d != 1 and 3d == 2)
has_dynamic = False
Expand Down Expand Up @@ -2807,7 +2825,7 @@ def CAkBankMgr__ProcessBankHeader(obj):

# Star Fox Zero (v112) has some odd behavior in the feedback flag. All .bnk except init.bnk set it, but
# no .bnk has feedback info. Presumably only init.bnk (first) flag's matters, but since we can't be sure
# that bank was loaded, we need some crude autodetection.
# that bank was loaded, we need some crude autodetection.
# Some test/remnant .bnk in SFZ use v88 and don't have the flag set, and no other 112 bnk exhibits this bug
# either (flag works as intended), so maybe it happened in some Wwise revision only.
if version == 112:
Expand Down

0 comments on commit 55b894d

Please sign in to comment.