On an unrelated note, when could we expect a hotfix update to v0.78? It would also be nice to see the moveset editor from v0.68b make a comeback in a separate branch version with added features.
I'll probably make a "final" version of 0.78 later this week, with just one change (an Edit All dialog fix.)
I wasn't working on BrawlBox until v0.72 so I'd have to go back and try to figure out where the bone flags went (unless BJ96 is around and knows.)
I'd like to fix the CSTM and FSTM stuff since I was the one who added that, but that will probably have to wait for later. Post Merge: March 07, 2017, 07:17:11 AMFor each of the bone flags, there is another way to toggle it:
NoTransform: I think it turns this one on if you set scale to (1,1,1) and translation and rotation to (0,0,0)
FixedTranslation: Set translation to (0,0,0)
FixedRotation: Set rotation to (0,0,0)
FixedScale: Set scale to (1,1,1)
ScaleEqual: Set scale to the same number in all 3 directions
SegScaleCompApply: has its own toggle setting
SegScaleCompParent: has its own toggle setting
ClassicScaleOff: has its own toggle setting
Visible: has its own toggle setting
HasGeometry: there is at least one node user (Users.Count > 0) or at least one object rigged only to this bone (SingleBindObjects.Length > 0). Not quite sure what this means exactly.
HasBillboardParent: set BillboardRefBone to something that is not null
I have bug to report on BrawlBox. It has not been fixed in 0.78 RC1 either.
The BFSTM framework for BrawlBox is not developed properly. Whenever you play a BFSTM in BrawlBox, there is always a clicking noise in the stream. Do you want to know what causes it? It's because it's using an incorrect hex value to indicate on moving to the next sample. So what happens is the next sample that is played is using an extra byte in playing back, but at the same time, missing the end of the sample that is supposed to be played as a sound sample.
It may sound like there's a clicking noise every 0.5 seconds, but that's because it plays too quickly for it to be heard until 0.5 seconds later. But what really is happening, is it's playing a clicking noise on every single sample in the stream.
Next up, multiple streams in BCSTM are not supported in BrawlBox yet, therefore bringing up an error saying that multi-stream files are not supported. But in reality, it's actually because BrawlBox got it's header values in the wrong position when reading the file format.
BCSTMs and BFSTMs are completely different format, you can't just expect them to be identical to BRSTMs. Their coding may be similar in that it's made using NintendoWare, but there are huge differences in their header positions in NW4C and NW4F formats.
Please fix them. Otherwise I may have to do some trial and error in trying to fix those bugs myself. ^^'
Do you have a link to some sort of specification for the header formats?
I assume vgmstream doesn't have this problem, right?
This is a thread for BrawlBox plugin scripts. v0.78 has a system that lets you write plugins in Python.
Just copy the text into Notepad and save it as a file with a .py extension in the Plugins folder alongside BrawlBox. Then you'll see it in BrawlBox under Plugins in the menu bar.
Batch convert files (pac <-> pcs)
To .pcs
Code:
from BrawlBox.API import bboxapi from BrawlLib.SSBB.ResourceNodes import *
import os
dir = bboxapi.OpenFolderDialog() if dir is not "": include_subfolders = bboxapi.ShowYesNoPrompt("Include subfolders?", "Batch conversion")
from_ext = ".pac" to_ext = ".pcs"
if not from_ext.startswith("."): from_ext = "." + from_ext;
if not to_ext.startswith("."): to_ext = "." + to_ext;
for root, dirs, files in os.walk(dir): for file in files: if file.lower().endswith(from_ext): no_ext, ext = os.path.splitext(file) node = NodeFactory.FromFile(None, os.path.join(root, file)) try: node.Export(os.path.join(root, no_ext + to_ext)) node.Dispose() except: bboxapi.ShowMessage("Cannot export " + file + " as format " + to_ext, "Error") if not include_subfolders: break
To .pac
Code:
from BrawlBox.API import bboxapi from BrawlLib.SSBB.ResourceNodes import *
import os
dir = bboxapi.OpenFolderDialog() if dir is not "": include_subfolders = bboxapi.ShowYesNoPrompt("Include subfolders?", "Batch conversion")
from_ext = ".pcs" to_ext = ".pac"
if not from_ext.startswith("."): from_ext = "." + from_ext;
if not to_ext.startswith("."): to_ext = "." + to_ext;
for root, dirs, files in os.walk(dir): for file in files: if file.lower().endswith(from_ext): no_ext, ext = os.path.splitext(file) node = NodeFactory.FromFile(None, os.path.join(root, file)) try: node.Compression = "None" node.Export(os.path.join(root, no_ext + to_ext)) node.Dispose() except: bboxapi.ShowMessage("Cannot export " + file + " as format " + to_ext, "Error") if not include_subfolders: break
LZ77 to ExtendedLZ77 (2017-3-23 - now supports subnodes)
Code:
from BrawlBox.API import bboxapi from BrawlLib.SSBB.ResourceNodes import *
import os import shutil
def haslz77(node): if node.Compression == "LZ77": return True if node.GetType().Name == "ARCNode": for child in node.Children: if haslz77(child): return True return False
def modifylz77(node): if node.Compression == "LZ77": node.Compression = "ExtendedLZ77" if node.GetType().Name == "ARCNode": for child in node.Children: modifylz77(child) return
dir = bboxapi.OpenFolderDialog() if dir is not "": include_subfolders = bboxapi.ShowYesNoPrompt("Include subfolders?", "Batch conversion")
ignore_ext = ".original-lz77"
for root, dirs, files in os.walk(dir): for file in files: if not file.lower().endswith(ignore_ext): try: node = NodeFactory.FromFile(None, os.path.join(root, file)) if node is None: continue
if haslz77(node): shutil.copyfile(os.path.join(root, file), os.path.join(root, file + ignore_ext)) node.Dispose()
This next issue has effected me since v0.77. Whenever I attempt to import a texture, the BrawlBox windows get small, and the text changes format.
Before attempting a texture import with v0.77 onward
How the texture import window should look (taken from v0.76b)
Texture import window with v0.77 onward
After attempting a texture import with v0.77 onward
Just like the previous issue, this is something that's still present in v0.78.
This only happens on high-DPI monitors. I think I tried once to fix it and couldn't come up with anything. I'll look again if I have time.
Quote
Edit: There seems to be an issue with v0.78's Edit All function for animations. It'll only edit and save animations that don't have keyframes for the bones in question. Otherwise, it'll display the changes, but revert said changes upon saving.
Edit 2: You can force the edits to save by making a minor edit to the affected animations.
Edit 3: I remember this same issue effecting the Clean function for animations as well. Changes wouldn't be saved, unless the animation was altered aside from being cleaned.
Sounds like it's not marking IsDirty as true on the CHR0 entry node. This should be an easy fix.
You might notice that this version is in a bigger .zip file and has a new directory structure. This is because it now supports python plugins! I have a couple I'm going to make and post in another thread.
Please test this version out and post here if there are any regressions from v0.77.
I noticed that the ASRL Flat Zone 2 .rel issue was solved in secretchaos1's Smash Bros. Infinite. The value for Flat Zone 2's ASCII identifier is 0x47570E50 in "ASRL - Stages" and 0x47570E52 in "ASRL - Modules" To my knowledge, this is the only stage that has different ASCII identifiers for the same stage within the ASRL.
Oh, that makes sense! GW.P (.pac) versus GW.R (.rel).
Hey, does BrawlBox v0.77 work well on 32-bit systems? Everytime I preview a model, it throws an error:
Unable to find an entry point named 'glGetUniformLocation' in DLL 'opengl32.dll'.
This might have something to do with your video driver. I know BrawlBox works on 32-bit - it actually doesn't work on 64-bit (lots of code that assumes you can cast pointers to ints) and so we always build it as a 32-bit program.
Here's a pack of stages that I've made at one time or another. There's no stage expansion code or anything like that - just replacing almost every Brawl stage with something else.
I noticed that the ASRL Flat Zone 2 .rel issue was solved in secretchaos1's Smash Bros. Infinite. Unlike the other stages, the values expected for the "ASRL - Stages" (0x47570E50) and "ASRL Modules" (0x47570E52) codes are not the same.
Neat! What are those two values? I assume one is 0x18 and the other isn't?
This version has support for uncompressed 16-bit PCM audio in BRSTMs. 16-bit PCM is what most WAV files use; this means that you can now make BRSTMs that have the same audio quality as WAV files (and the same large filesizes - they're about 3-4 times the size of a regular ADPCM-compressed BRSTM.)