|
|
« on: March 18, 2014, 07:24:13 PM » |
|
Hello all, In the past there have been a few Threads about unknown Brawl files, but most of them are long forgotten and died out before things could really be finished. Alot of information was discovered in those threads, but sadly there isn't one central point to keep this information, or to continue research. So, that's where this thread comes in. While most of brawl's files have been parsed and are now editable, i feel there is still potential in the files that remain mostly un-touched.One of the mostly untouched areas in Brawl modding is SSE. Some files have been partially decoded as of now, but with full knowledge over the files, we may be able to write a completely new SSE. From that, someone would be able to write a tool to edit the files. That's just one possibility of uncovering the unknown files, just think of the other files that are still unknown. This thread is going to serve as a place for people to help with parsing Brawl files and figuring out exactly what they do. I'll post some of the information from the previous threads here as well to try and keep everything centralized. Hence why this post will borrow almost copy paste from previous threads. Thank you to all who helped uncover these files and wrote these out. Tutorials Intro to HexingFor those completely new to hexing, let's do a quick little exercise. Open Brawlbox, select File --> New --> BRRES. Right-Click the BRRES and select New --> Character Animation. Finally, Right-Click the animation and create a new bone animation. You should end up with this: Now you should have a basic animation file, 1 frame without any animation data. Right-Click and export the NEWCHR animation (CHR0) so it can be hexed. Open up the animation CHR0 in your hex editor, any hex editor will work, I'll be using Notepad++ but the results will be the same. Assuming you didn't rename the CHR0, it should look more or less like this, depending on your view settings: So you might be thinking "i could never read what these random numbers mean!" but let's get into that right now. Since there aren't any animations in this file, it's pretty much empty. Open the animation in Brawlbox and change the Translation X keyframe value to 1, export the CHR0 and open it in hex again. You can see some changes here and there, but how do we find out what they mean? Thanks to Brawlbox, we know that this animation file has a single keyframe with a value of 1. That number (keyframe value, not amount of keyframes) was translated into a 8-digit value called a Float value, which can be translated with this webpage. Tools like these are a hexer's best friend. Using that webpage, you can see that 1.0 in hexidecimal is 3F 80 00 00. You should be able to find that number in your hex editor: if not, then It's highlighted in the previous image. Any single number, even 99999 or 3.14, will be displayed as an 8-digit float value. If you change the keyframe value in Brawlbox, then the only difference will be that float value: everything else remains the same. Now let's do something cool with your hex editor: Click on the beginning of the float value and type 44 a7 20 00, save and open in Brawlbox. You just hexed the keyframe value from 1 to 1337. Pretty neat, right? This is what Brawl hackers do to change simple number values that aren't editable in Brawlbox, as well as hacking computer files in general. Try using your new knowledge of float values and hexing to change numbers in other Brawl files, or add more keyframes with numbers and see where each number ends up. In the meantime, I'll set up the next tutorial about identifying file structures. Videos *UpdateDownload links:HXD, a commonly-used hex editor. Notepad++, a handy program based off of Notepad with a Hex Plugin. Hexidecimal Number Converter (website, not a download) File Structures:General / stage related: BLOCVaries. commonly found in miscdata[5] ADSJAdventure_Common under 'jump'======================================================================= ADSJ: The jumps from doors to different stages, can be used to add new stages up to 999999e ======================================================================= Header: 0x00(4): ADSJ 0x04(4): Number of Entries in the offset section 0x08(4): Nulls 0x0C(4): Nulls Offset section: The offset section comes right after the header in most files, and contains offsets to each jump data within the file. Jump Data: 0x00(4) - Possibly File ID of door to 'jump' to. (decimal) 4th byte denotes door Index 0x04(4) - Possibly flags for the jump 0x08(4) - possibly File ID of door jumping from (hex) 4th byte denotes door Index 0x12 -String name of stepjump bone GDORIn BLOC files, most often miscdata[5]======================================================================= GDOR Controls the doors inside each stage, including where each door leads to. Needs appropriate info in adventure common. ======================================================================= Header: 0x00 - GDOR 0x04 - Number of entries 0x08 - Offset section begins Door Data: 0x24 - Unknown Float 0x28 - Unknown Float 0x2C - unknown Float 0x30 - Stage File ID 0x33 - Door Index 0x34 - Unknown 0x38 - StepJump "to" bone x-translation 0x3C - StepJump "to" bone z-translation GNDVInside BLOC files======================================================================= GNDV: Seems to have to do with animations, possibly ground based VIS0 animations. also controls the sound that is played upon activation Found in Skyworlds collapsing clouds ======================================================================= Header: size- 0x08 0x00 -GNDV 0x04-Number of entries in the file Offset section: The offset section comes right after the header in most files, and contains offsets to each Ground data entry in the file Ground data: Entry size -0x30 0x00 - string of entry / bone that triggers the animation after the string entry The next data you will see will be the hexadecimal representation of the Infoindex for the sound that is played when the animation is triggered. In this example it is '22 9F' Example: 00 00 00 00 | 53 74 65 70 | 43 6F 6C 6C | 61 70 73 65 | ....StepCollapse0 30 38 00 00 | 00 00 00 00 | 00 00 00 00 | 00 00 00 00 | 8.............. 00 00 00 00 | 00 00 22 9F | 00 67 00 02 | 00 D0 01 00 | ......"Ÿ.g...Ð.. SCLAMiscdata[30] in *most* stages======================================================================= SCLA Possibly Data table for stages Seems to be tied to the collision data in miscdata[2] ======================================================================= All stages have a SCLA file, most have an index of MiscData[30]. Possibly Data table for stages Seems to be tied to the collision data in miscdata[2]. This file is almost completely untouched, aside from the ground data that i uncovered recently. There are likely MANY more data types within this file, its all a matter of finding out what they do. Here's the ones that have a different index: STGJUNGLE.pac MiscData[100] STGPICTCHAT_xx.pac MiscData[8] STGDXBIGBLUE.pac MiscData[70] STGEDIT_0.pac MiscData[903] STGEDIT_1.pac MiscData[1903] STGEDIT_2.pac MiscData[2903] STGTARGETLV1.pac MiscData[50] STGTARGETLV2.pac MiscData[50] STGTARGETLv3.pac MiscData[50] STGTARGETLv4.pac MiscData[50] STGTARGETLv5.pac MiscData[50] *STGCHARAROLL_xx.pac doesn't have any. There's also a SCLA in adventure_common_en.pac (MiscData[0]). Header: size -0x0F 0x04 - Number of entries in offset section Offset section: The offset section comes directly after the header in all files i've found. The File's values seem to be static between files. The offsets values here are 4 bytes long and point to offsets later in the file that contain data. Notable Offsets: Offsets to these data tables change depending on the collision data in miscdata[2] it seems, so these will be descriptions of offsets that i know are contained in this file -ground Collision data. Contains step + landing sounds, ground traction(Float value), and somewhat controls gfx played when dashing on ground Ground DATA: Size of entry - 0x54 0x00 - Numeric ID of the entry 0x04 - Float value for ground traction. 0 = never ending slide. 10 = immediate stop with no slide. Example of ground data: 00 00 00 17 3F 80 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 DD 00 00 00 DD 00 00 00 DD 00 00 00 DD 01 01 00 00 00 00 00 00 00 00 00 E0 00 00 00 E0 00 00 00 E0 00 00 00 E0 01 01 00 00 00 00 00 00 00 00 00 E0 00 00 00 E0 00 00 00 E0 00 00 00 E0 GSNDMiscdata[8] in some single room battle stages=================================================================== GSND Sounds played on stage. found in single room battle stages (rooms like level 1, Mario vs Kirby) Labled as miscdata[8] Always contained within BLOC files. =================================================================== Header: size -0x08 0x00 - GSND 0X04 - Number of entries in the file 0x08 Offset section begins Data: each offset in the offset section is relative to the beginning of the GSND file. The data the offsets point to are the Info index of sounds in smashbros_sound.brsar represented as hex. Convert these numbers to decimal to find the sound that gets played. 0x00 - Info index of sound represented in Hex ox04 - String beginning flag? always followed by 16 null bytes 0x14 - unknown float value. 0x18 - nulls 0x1C - string of stage? 0x3C - Trigger ID? BGMGAdventure_Common labeled miscdata[4]=================================================================== BGMG Music properties for SSE Stages/Boss Battles/Classic Mode (final stage) =================================================================== Header (0x10) 0x00(4) BGMG 0x04(4) # of entries (0x10F) 0x08(4) Nulls 0x0C(4) Nulls 0x10 - offset section begins Entry (0x10) 0x00(4) Stage/file ID 0x04(4) Song ID 0x08(4) Volume(?) (Always 0x64 (100)) 0x0C(4) Nulls Stage ID list:Music ID list: GMTA*UpdatedInside BLOC files, most often in miscdata[5]=================================================================== GMTA Stage Hitboxes! =================================================================== Header: 0x00 - GMTA 0X04 - number of entries 0x08 - offset section begins ==Hitbox Data== *there are ALOT of unknown values here, but these are what i've found so far*0x3C - File index of model specifying hitbox bone and location 0x1E4 - Damage Multiplier (Scales with Difficulty) 0x1E8 - Hitbox Size 0x20C - Hitbox Effect 0x228 - Hitbox sfx GMWA*NEWInside BLOC files, most often in miscdata[5]=================================================================== GMWA Controls all buttons placed in the level =================================================================== Header: 0x00 - GMWA 0x04 - Number of entries 0x08 - Offset section begins ==Button Data== 0x0C - Y-rotation 0x20(2) - Always 0x0001? 0x22(2) - positioning model File index. if 0xFF(none) position will be overridden with local float values? 0x28(4) - Button ID? 0x2C(4) - Trigger ID of this button 0x30(4) - Trigger ID to activate 0x88(4) - Hurtbox size GMOTInside BLOC files, most often in miscdata[5]=================================================================== GMOT(grAdventureMotionGround) It's currently unknown what the applicable difference is between GMOT and GMOV, Both seem to move objects with collisions attached to them =================================================================== Header: 0x00 - GMOT 0x04 - Number of entries 0x08 - Offset section begins ==Data== 0x00(3C) - Unknown float values 0x3C(1) - Hexadecimal File Index of Model data in BBox associated with the object to be moved 0x3D(1) - Hexadecimal File Index of Collision Data in BBox associated with the object to be moved 0x118(4) - Hexadecimal Info index of sound to be played GMOVInside BLOC files, most often in miscdata[5]=================================================================== GMOV(grAdventureMoveGround) It's currently unknown what the applicable difference is between GMOT and GMOV, Both seem to move objects with collisions attached to them =================================================================== Header: 0x00 - GMOV 0x04 - Number of entries 0x08 - Offset section begins ==Data== 0x00(44) - Unknown float values 0x3C(1) - Hexadecimal File Index of Model data in BBox associated with the object to be moved 0x3D(1) - Hexadecimal File Index of Collision Data in BBox associated with the object to be moved GBLKInside BLOC files, most often in miscdata[5]=================================================================== GBLK Breakable blocks placed within levels =================================================================== Header: 0x00 - GBLK 0x04 - Number of entries 0x08 - Offset section begins ==Data== 0x00(18) - Nulls 0x18(4) - Hurtbox size 0x1C(4) - Nulls 0x20(4) - Unknown 0x24(4) - Flags? 0x28(1) - unknown 0x29(1) - Base Block Model 0x2C(1) - Block Position Model 0x2D(1) - Collision Definition of block 0x30(4) - 0xFFFFFFFF 0x34(4) - 0xFFFFFFFF GFPR*NEWInside BLOC files, most often in miscdata[5]=================================================================== GFPR (grAdventureFirePillar) Pillars of fire! =================================================================== ==Hitbox Data== *there are many unknown values here, but these are what i've found so far* 0x00(3C) - Padding 0x3C - File index of model 0x20c - Hitbox effect 0x228 - Hitbox sfx 0x240 - x-translation 0x244 - y-translation 0x248 - z-translation 0x264(3C) - Padding GEFF*NEWInside BLOC files, most often in miscdata[8]Enemy Files: GEG1*UpdatedInside BLOC files, most often in miscdata[7]=================================================================== GEG1: Number Of enemies spawned / positions, type, spawn time, and AI behaviour of enemies =================================================================== Header: 0x00 - GEG1 0X04 - number of entries 0x08 - offset section begins Enemy Data: 0x1D - Enemy type 0x20 - AI type? 0x7C(4) - Trigger ID of this enemy 0x80(4) - Trigger ID to activate when this enemy is destroyed ==Enemy Types== -0F spaak | AI type 05 -17 Prim | AI type 00 -14 boxer prim | AI type 00 -20 Boom prim | AI type 00 -23 sword prim | AI type 00 Files that need parsing:-EPSP [enemy AI] -GLAD [Ladders] -GIB2 [Item Blocks] -GMTA [Stage Hitboxes!] -GMWA [Buttons] -GLOK -GFSR -GMOT -GFT2 -GENC -GEPT -GNDV -GITM -GASD -GET1
|
|
« Last Edit: August 02, 2014, 12:41:02 AM by Sammi Husky »
|
Logged
|
|
|
|
|
|
|
« Reply #1 on: March 23, 2014, 02:03:43 AM » |
|
Turns out GEG1 and the EPSP files are directly related and control the enemy spawns and AI behavior respectively. will update the OP with new information accordingly. Currently, i can almost 100% rebuild the files that spawn enemies. i can spawn any type of enemy from prims to spaak, as well as when and where they are spawned.
(BTW im taking this post in case i run out of room in the OP)
|
|
« Last Edit: March 23, 2014, 02:05:59 AM by Sammi Husky »
|
Logged
|
|
|
|
|
|
|
« Reply #2 on: March 23, 2014, 04:08:11 AM » |
|
yay! more filetypes to explore ;w;
|
|
|
Logged
|
Stupid Tinypic :C
|
|
|
|
|
|
« Reply #3 on: March 23, 2014, 12:59:55 PM » |
|
Luckily after looking the module for adventure stages, it seems that almost all of SSE is dictated through files. Which is good, because that means we really can have complete control. Incidentally, if you look through the module's objects section (section[5]) you'll find a list of all SSE files. I actually have a hunch that ADPM files dictate what mode the stage is. (e.g boss battle, melee battle) though this is just suspicions Deviating from SSE files a little bit SCLA seems to control nitty gritty details about stage collisions. Such as step sound, landing sound, whether dash gfx are played, and global ground friction. And that's only one of the sections in SCLA out of 30. Though I don't think all stages use ALL the parameters, or even most. AND depending on the collision data (miscdata[2]) it seems that the data locations within the file are shifted, or maybe just use different sections....I haven't quite figured that file out yet.
|
|
« Last Edit: March 23, 2014, 05:03:51 PM by Sammi Husky »
|
Logged
|
|
|
|
|
|
|
« Reply #4 on: March 23, 2014, 06:09:52 PM » |
|
Can enemies only be spawned within the SSE? Or would it be possible to spawn them outside of it by, say, a character, or on a stage? Just a thought, I know nothing of this stuff.
Wish I could help, but for now I'll be cheering here on the sidelines, hoping you find something juicy that could help with stage making. :1
|
|
|
Logged
|
Muslims are literally murderers
|
|
|
|
|
|
« Reply #5 on: March 23, 2014, 09:06:27 PM » |
|
I haven't experimented with the Spawning the enemies in a normal stage, that would be interesting! it's a good idea, i'll have to give it a shot sometime. I do have my suspicions that it wont work, but i'll give it a go either way. The SCLA file isn't mapped much yet, but it in particular seems to be the juicy stuff inside normal stages. Like traction / step sound and landing sounds. Hopefully i can find some really nice stuff in there after i map it!
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #6 on: March 23, 2014, 09:26:34 PM » |
|
Nice work here! Always a fan of modifying the SSE. I'm with Grav here in that I really want to help, but it seems kinda out of my expertise.
Is there any way we can help out? If you can tutorialize the process of mapping into a replicable general workflow, crowdsourcing might be of use to you!
Among other things, I'm fairly sure that SSE enemies have a PSA-like component to them as well. Maybe checking the Brawlbox Source (or PSA, if the source is around) might give some leads into cracking it? I'll try looking into it, too, but I'm no professional.
In any case, good luck! Cheering for you!
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #7 on: March 24, 2014, 05:50:28 AM » |
|
the enemy data is awesome!
but using that data in stage is harder than it looks, it needs to be loaded in the module aswell :/
|
|
|
Logged
|
Stupid Tinypic :C
|
|
|
|
|
|
« Reply #8 on: March 24, 2014, 11:33:00 AM » |
|
Subbed to thread. I worked on SSE files a long time ago, and had some data on the different types. Sadly, I think most of it is gone, due to my PC breaking some time ago. I posted some information in the SSE collab thread, if you want to add it to the OP.
|
|
|
Logged
|
3DS FC: 5370-0958-4818 Wii U NNID: Doraleus
|
|
|
|
|
|
« Reply #9 on: March 24, 2014, 01:56:41 PM » |
|
Sweet! i'll go nab that but using that data in stage is harder than it looks, it needs to be loaded in the module aswell :/
Yea using it in anything but an adventure stage won't work, because the module sora_adv_stage is programmed to load these files and act a certain way, while sora_melee is not. What makes SSE so customizable, is that it uses a single generic module to govern ALL adventure stages. That means that anything thats different between skyworld and halberd or any other stage, is completely controlled by these files and not the module.
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #10 on: March 24, 2014, 02:19:10 PM » |
|
Sweet! i'll go nab that Yea using it in anything but an adventure stage won't work, because the module sora_adv_stage is programmed to load these files and act a certain way, while sora_melee is not. What makes SSE so customizable, is that it uses a single generic module to govern ALL adventure stages. That means that anything thats different between skyworld and halberd or any other stage, is completely controlled by these files and not the module. I know that, together that the enemy module data is inside Sora_Enemy, which controlls the "PSA" of the enemies just like Ft_Char does to a character. so to add a enemy to a regular VS stage, the Stage module need the Sora_Enemy "enemy" part together with the part of Sora_Adv_Stage to have it work
|
|
|
Logged
|
Stupid Tinypic :C
|
|
|
|
|
|
« Reply #11 on: March 26, 2014, 12:59:22 PM » |
|
Well, it seems my suspicions about ADPM were correct, it controls the game mode of the level, whether it be a boss battle, normal battle, or what have you. I haven't documented the file itself yet, but soon. I have succeeded in changing the first level (where you fight kirby) from fighting a char, to fighting in an arena full of enemies. However, the enemies don't spawn, and the match instantly ends as it starts since no enemies were spawned. I hope i can find the file that's responsible for this..hmm..
But hey progress is progress and im one step closer to being able to rebuild a single level into something completely different
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #12 on: March 28, 2014, 04:53:42 AM » |
|
something I am really curious about is how to change the stages, example changing the first kirby/Mario match to another stage, making the stage seceltion load another stage or make the Masterhand Boss in Classic mode being another boss
also, do you know that the filetypes is nickname for what actually doing? BGMG can be Background Music Generator GSND can be Generate Sound GMOV can be Generate Movie GITM can be Generate Item GEG1 can be Generate Enemy Generator 1
|
|
« Last Edit: March 28, 2014, 05:12:30 AM by pikazz »
|
Logged
|
Stupid Tinypic :C
|
|
|
|
|
|
« Reply #13 on: March 28, 2014, 03:35:13 PM » |
|
Of course i know the filtype is an acronym for what the file does, however i felt i would just leave figuring out the acronym to others, and focus on what the files actually do instead incidentally, it seems that anything that MOVES uses GMOV. Take a look at the BLOC archive in 280202a, there are a few helpful filetypes there. It's a fairly simple room with only a few notable things within it. Such as the door and the falling block. The falling block is what im really interested in, as it has hitboxes attached to it.
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #14 on: March 28, 2014, 05:50:28 PM » |
|
the sad thing we cant use that into to the fighter or the Brawl stage themself D; imaging how easy it would be if we could use that moving block in 280202a to a stage example final destination!
|
|
|
Logged
|
Stupid Tinypic :C
|
|
|
|
|