ME 2 PC : Coalesced Editor v1.0.0.32 (B)
#126
Posté 04 février 2010 - 10:44
#127
Posté 05 février 2010 - 01:09
#128
Posté 05 février 2010 - 01:35
Make a change in BIOInput.ini section then rebuild the file - the hex count for BIOInput section is offset to the right by one byte (or offset by +1 bytes).
Should be something like "FF 8B 00 00"
Instead it is "00 FF 8B 00"
Of course this causes ME2 to fail to run.
Loading the ini file into my Word macro then rebuilding fixes the error. So something's wrong with your (global) rebuilding code (or however you do it), at least it's bad in v1.0.0.8, haven't tried v1.0.0.9 yet. Was working in v1.0.0.6 though.
Oddly, I thought it was working - I thought v1.0.0.8 had been run at least once, changing the same item, and rebuilt properly. But, when this particular change resulted in an error I tried rebuilding the ini and got the same failure. Didn't try it again after that. I may have been using v1.0.0.6 previously and just thought that v1.0.0.8 was working properly.
Modifié par zBobG, 05 février 2010 - 01:56 .
#129
Posté 05 février 2010 - 03:04
#130
Posté 05 février 2010 - 03:13
thought this was a savegame editor so i could stop the stupid joker auto trigger mission, but i guess that save is "¤"#¤"¤ up
#131
Posté 05 février 2010 - 03:36
#132
Posté 05 février 2010 - 07:35
All the lengths for data for all entries, except the BIOWeapon, is correctly stored.
But it's most defintiely not for BIOWeapon. They have 8607 stored but it's actually 137487 bytes in length. There's no way a parser following the strict structure of the file (as I interpret it) wouldn't puke when it tries to chew that file entry so they must have added a kludge in there when they hit that one to just find the trailing null for that entry and ignore the length in the data header.
But any way I've reexamined the byte structure of the file and have refactored. It will still expect (respect) the filename and filedata headers to be 4 bytes immediately proceeding their associated data but will be more loose on the data itself and recompute as before. The shift error was actually a mistake in my initial tired examination where I was thinking it was actually 5 byte haders, when it reality it appears it's only 4 and the 1st is actually just the trailing null for the prceeding file name entry.
#133
Posté 05 février 2010 - 07:48
But is there any way to force 5.1 audio like in the first game? It was just some lines in BIOengine under [ISACTAudio.ISACTAudioDevice]. But now in Coalesced.ini there is no such thing. And if I add it, the game crashes on start.
I have Soundblaster X-Fi usb headphones running CMSS 3d (virtual surround) that needs 5.1 audio input to work properly.
Thanks for any help in advance.
#134
Posté 05 février 2010 - 07:57
But considering the enormous amount of settings available I'd be surprised if it's not in there somewhere maybe just under another name. There's a staggering amount of setting to be sure, including duplicates (or overrides )as well as an interesting (and quite scattered) bindng system that I still need to interpret further. Hopefully someone has or will locate an answer for you.
#135
Posté 05 février 2010 - 08:48
#136
Posté 05 février 2010 - 09:04
Not quite sure I understand the problem yet. So you downloaded the zip and unzipped it somewhere, and it execues. Correct?
If it runs, do you see a screen saying it will use a location it found? Is the path it displays in the dialog the correct path to the game?
If it's a dialog asking for the path are you navigating to the root directoy of the game?
Does it accept that selection and continue to launch?
When it launches do you see a bunch of entries in a treeview on the left side of the app?
Again I'm not quite sure where you are in the sequence or the problem you're having. And I definitely don't know what "none of the pre set hotkeys don't work on the keypad" means so please explain a bit further if you can.
The editor is developed on Windows Ultimate x64 using .NET 3.5 so it works fine on Vista as well as XP. I haven't tested it on other platforms.
#137
Posté 05 février 2010 - 10:43
Id like to download and have a look around the program etc but want to be sure that wont mess my game up. Will i only encounter bugs if i change something?
Cheers
#138
Posté 05 février 2010 - 11:19
apoc_reg wrote...
Hey Iron, looking good.
Id like to download and have a look around the program etc but want to be sure that wont mess my game up. Will i only encounter bugs if i change something?
Cheers
Make backup of your Coalesced.ini file before launching it so you can easily revert if you encounter problems. The program aso automatically makes a backup but you should always make 1 yourself too, and first.
The program only alters that file, so if something goes bad, restorng that file will restore you as though you never used it. It's in Beta and has known bugs. There are situations where the rebuild function operates incorrectly and produces a file result that won't work however that is currently the minority not majority of experiences by folks using it.
I am actively refactoring (right now actually) the rebuild to create more rigid structures that precisely use the structures in the file which will resolve this problem and should be in the next release.
#139
Posté 05 février 2010 - 08:19
Here is my Word macro for globally rebuilding the hex counts, it works EVERY time. It does compute the hex counts the same way for every block. I thought it might help for you to see how simple it is to just globally rebuild the hex counts all at one time. Bear in mind that it is a Word macro and certain parts of the algorithm can be done more efficiently in an actual programming language. Word must process a macro as if everything is a character code, there are few high level language constructs available. Particularly see the hex conversion routines, they're not very sophisticated but they work. Comments are marked by a leading single quote. The double slashes in LongToHex are an artifact of this forum, that slash indicates an integer division (as opposed to a real division).
Not to tell you how to program but... It might be best to globally rebuild the file, by force, before the program exits if any changes have been made. You could give a messagebox that said something like "Changes have been made. Rebuild file?" That way a user would be reminded if any changes have been made, accidental or not, and given the choice to throw away those changes if they wished.
Sub fix_file()
'
' fix_file Macro
' Fix the coalesced ini file
'
Dim num_files As Long, num_b0 As Byte, num_b1 As Byte, num_b2 As Byte, num_b3 As Byte
Dim block_count As Long, text_length As Long, curr_char As String
' go to top of file
Selection.HomeKey Unit:=wdStory
' get number of files in coalesced ini
num_b0 = Asc(Selection)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
num_b1 = Asc(Selection)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
num_b2 = Asc(Selection)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
num_b3 = Asc(Selection)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
' convert bytes to long
num_files = HexToLong(num_b0, num_b1, num_b2, num_b3)
block_count = 0
' parse each ini block
Do While block_count < num_files
' get number of chars in ini name
num_b0 = Asc(Selection)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
num_b1 = Asc(Selection)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
num_b2 = Asc(Selection)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
num_b3 = Asc(Selection)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
' convert bytes to long
text_length = HexToLong(num_b0, num_b1, num_b2, num_b3)
' parse the ini name
' counter = 0
' Do While counter < text_length
' counter = counter + 1
' Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
' Loop
Selection.MoveRight Unit:=wdCharacter, Count:=text_length, Extend:=wdMove
block_count = block_count + 1
' set a bookmark for the text length
ActiveDocument.Bookmarks.Add Name:="textBlock"
' move the selection to the text
Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdMove
' parse the text
curr_char = Selection
text_length = 1
Do While curr_char Chr(0)
text_length = text_length + 1
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
curr_char = Selection
Loop
' move right of the null
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
' bookmark for next block
ActiveDocument.Bookmarks.Add Name:="nextBlock"
' go to text bookmark
ActiveDocument.Bookmarks("textBlock").Select
' fill in the hex number
Call LongToHex(text_length, num_b0, num_b1, num_b2, num_b3)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Text = Chr(num_b0)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Text = Chr(num_b1)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Text = Chr(num_b2)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Text = Chr(num_b3)
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdMove
' go to next block
ActiveDocument.Bookmarks("nextBlock").Select
block_count = block_count + 1
Loop ' each ini block
' go back to top of file
Selection.HomeKey Unit:=wdStory
MsgBox ("File fixed")
End Sub
Public Function HexToLong(b0 As Byte, b1 As Byte, b2 As Byte, b3 As Byte) As Long
Dim RetVal As Long, temp As Long
temp = (b1 * 256)
RetVal = b0 + temp
temp = (b2 * 256 * 256)
RetVal = RetVal + temp
temp = (b3 * 256 * 256 * 256)
HexToLong = RetVal + temp
End Function
Public Function LongToHex(LongVal As Long, b0 As Byte, b1 As Byte, b2 As Byte, b3 As Byte)
Dim temp As Long
b0 = LongVal Mod 256
temp = LongVal \\ 256
b1 = temp Mod 256
temp = ((LongVal \\ 256) \\ 256)
' or... temp = temp \\ 256 <---- Word sometimes chokes on this, so avoided - no real performance benefit
b2 = temp Mod 256
temp = (((LongVal \\ 256) \\ 256) \\ 256)
' or... temp = temp \\ 256 <---- Word sometimes chokes on this
b3 = temp Mod 256
End Function
Modifié par zBobG, 05 février 2010 - 08:45 .
#140
Posté 05 février 2010 - 09:05
zBobG wrote...
I don't know what you're saying about BIOWeapon. As far as I can tell the hex count for that is correct ...
?.. Try a hex editor?
My code parses the actual structure of the file. The file has a structure that defines the data contained inside it.
Coalesced.ini:
Bytes 0 to 3 are currently unknown (to me) as to what they represent and are kept intact as-is. There are NOT 30 files inside the Coalesced.ini file. There are 15.
From there on out, the fie has a structure (from my interpretation, and from proven implementation) as follows: Note the lengths are stored in reverse.
4 byte filename header:
This contains a value indicating the length in bytes of the filename immiedately followng the header. The length includes the trailing null.
Immediately following this header is the filename and null, at the precise length indicated in the header.
Next...
4 byte filedata header:
This contains a value indicating the length in bytes of the actual data for the file. The length includes the trailing null.
That's the structure of the file.
Each filename has a 4 byte header preceeding it describing its length.
Each data block has a 4 byte header describing its length.
There are precisely 15 files inside Coalesced.ini
Each file has 1, and only 1, filename with a 4 byte header preceeding it that describes it, and only it.
Each file has 1, and only 1, data block representing the data for the file with a 4 byte header preceeding the data block. Each fie has 1 and only 1 data block.
This is the reason the game crashes when the file is edited without the file being rebuilt. The headers are interpreted, which means the game code uses the headers to find the data, so if the data in the headers themselves are wrong, the game will parse the data wrong.
Hopefully that clears it up.
Here's a quick dump from my editor of what I'm talking about:
Entry 001, FNHNDX: 0000004, FNNDX: 0000008, DHNDX: 0000046, Data 0000050 to 0000850, SLEN: 0000801, ALEN: 0000801, FILE: ../BIOGame/Config/PC/Cooked/BIOAI.in
Entry 002, FNHNDX: 0000851, FNNDX: 0000855, DHNDX: 0000897, Data 0000901 to 0021520, SLEN: 0020620, ALEN: 0020620, FILE: ../BIOGame/Config/PC/Cooked/BIOCompat.in
Entry 003, FNHNDX: 0021521, FNNDX: 0021525, DHNDX: 0021568, Data 0021572 to 0030119, SLEN: 0008548, ALEN: 0008548, FILE: ../BIOGame/Config/PC/Cooked/BIOCredits.in
Entry 004, FNHNDX: 0030120, FNNDX: 0030124, DHNDX: 0030166, Data 0030170 to 0105504, SLEN: 0075335, ALEN: 0075335, FILE: ../BIOGame/Config/PC/Cooked/BIOEditor.in
Entry 005, FNHNDX: 0105505, FNNDX: 0105509, DHNDX: 0105562, Data 0105566 to 0109477, SLEN: 0003912, ALEN: 0003912, FILE: ../BIOGame/Config/PC/Cooked/BIOEditorKeyBindings.in
Entry 006, FNHNDX: 0109478, FNNDX: 0109482, DHNDX: 0109536, Data 0109540 to 0110532, SLEN: 0000993, ALEN: 0000993, FILE: ../BIOGame/Config/PC/Cooked/BIOEditorUserSettings.in
Entry 007, FNHNDX: 0110533, FNNDX: 0110537, DHNDX: 0110579, Data 0110583 to 0219585, SLEN: 0109003, ALEN: 0109003, FILE: ../BIOGame/Config/PC/Cooked/BIOEngine.in
Entry 008, FNHNDX: 0219586, FNNDX: 0219590, DHNDX: 0219630, Data 0219634 to 0314454, SLEN: 0094821, ALEN: 0094821, FILE: ../BIOGame/Config/PC/Cooked/BIOGame.in
Entry 009, FNHNDX: 0314455, FNNDX: 0314459, DHNDX: 0314500, Data 0314504 to 0349354, SLEN: 0034851, ALEN: 0034851, FILE: ../BIOGame/Config/PC/Cooked/BIOInput.in
Entry 010, FNHNDX: 0349355, FNNDX: 0349359, DHNDX: 0349400, Data 0349404 to 0350648, SLEN: 0001245, ALEN: 0001245, FILE: ../BIOGame/Config/PC/Cooked/BIOParty.in
Entry 011, FNHNDX: 0350649, FNNDX: 0350653, DHNDX: 0350702, Data 0350706 to 0354631, SLEN: 0003926, ALEN: 0003926, FILE: ../BIOGame/Config/PC/Cooked/BIOStringTypeMap.in
Entry 012, FNHNDX: 0354632, FNNDX: 0354636, DHNDX: 0354676, Data 0354680 to 0355886, SLEN: 0001207, ALEN: 0001207, FILE: ../BIOGame/Config/PC/Cooked/BIOTest.in
Entry 013, FNHNDX: 0355887, FNNDX: 0355891, DHNDX: 0355929, Data 0355933 to 0428418, SLEN: 0072486, ALEN: 0072486, FILE: ../BIOGame/Config/PC/Cooked/BIOUI.in
Entry 014, FNHNDX: 0428419, FNNDX: 0428423, DHNDX: 0428465, Data 0428469 to 0565955, SLEN: 0008607, ALEN: 0137487, FILE: ../BIOGame/Config/PC/Cooked/BIOWeapon.in
Entry 015, FNHNDX: 0565956, FNNDX: 0565960, DHNDX: 0566005, Data 0566009 to 0566109, SLEN: 0000101, ALEN: 0000101, FILE: ../BIOGame/Config/PC/Cooked/PC-BIOEngine.in
As can be seen the stored length for all entries -except- BIOWeapon are correct.
Modifié par Iron Spine, 05 février 2010 - 09:49 .
#141
Posté 05 février 2010 - 09:49
dec: 137487
hex: 0F 19 02 00
The first four bytes of the file is the number of blocks in the file, or the number of included ini files divided by 2.
Each inifile has a name block and a data block. So (number of files) = (number of blocks / 2).
Technically the hex bytes are in little-endian order (low byte first, left to right) which is the standard for x86 code. It is "reversed" from standard decimal order which technically is called big-endian, if that's what you mean.
To an x86 assembly programmer little-endian order is not "reversed", it is the correct hex order.
For numbers, little-endian means the little end is first, big-endian means the big end is first when read from left to right.
Another problem found v1.0.0.10:
The following is not really your program's problem but is an issue which breaks your program.
After the final null in the coalesced.ini file the file should normally end. Interestingly, there can be bytes following the final null and ME2 does not complain, the file is accepted. So, how is this a problem?
Various utilities that may be used to edit the coalesced.ini file MAY add an additional null or even add an additional line-feed. ME2 does not complain about these extra characters but your editor does complain and refuses to load the file. I can suggest that your program should simply disregard any extra characters following the final null, load the coalesced.ini file, just disregard any extra characters and when saving just don't save those extra characters.
Modifié par zBobG, 05 février 2010 - 10:15 .
#142
Posté 05 février 2010 - 09:50
[FullScreenMovie]
.
.
SkippableMovies=ME_EAsig_720p_v2_raw
SkippableMovies=publisher
SkippableMovies=BWLogo
Yet, you can't use Spacebar or Esc to skip them.
So we are sure these below don't work right ?
[SFXGame.SFXGameModeCinematic]
Bindings=( Name="SpaceBar", Command="Shared_CineSkip" )
Bindings=( Name="Escape", Command="Shared_CineSkip" )
[SFXGame.SFXGameModeMovie]
Bindings=( Name="SpaceBar", Command="Shared_MovieSkip" )
Bindings=( Name="Escape", Command="Shared_MovieSkip" )
[SFXGame.SFXGameModeBase]
Bindings=( Name="Shared_CineSkip", Command="SkipCinematic" )
Bindings=( Name="Shared_MovieSkip", Command="SkipMovie" )
Skipping anything in the game is not possible because it's hardcoded I suppose. /cry
Modifié par Catscratcher, 05 février 2010 - 09:51 .
#143
Posté 05 février 2010 - 09:56
Oh excellent you're a real programmer then and do understand whew. Yes I said reversed because I wasn't sure if you'd actually know what I meant. To someone that didn't understand it, they might try to logially parse it from left to right and then scratch their head wondering what the hell the number represents. I've been an engineer for 20 years and started with assembly (been looooong long time though since I've done that).
Any way, the 1st 4 bytes now makes sense and also explains why both actually work.
I have explicitly written the program to try ad follow the structure as rigidly as possible in case the game -does- have trouble which I would know if it did or didn't unless I mangled the data in various ways to try and break its loading procedures, which I haven't. I'll check into loosening up the rigidity so it's more flexible in that regard.
UPDATE:
I went ahead and just added some asasdasdasd to the end to see what you're talking about. I'll see about having it just drop extranious. It's written this way for the rigid purpose I described above, but it will be much more friendly if it simply drops the junk that others may have incorrectly (or otherwise) appended to the file data.
Modifié par Iron Spine, 05 février 2010 - 10:35 .
#144
Posté 05 février 2010 - 10:02
Catscratcher wrote...
...
Yet, you can't use Spacebar or Esc to skip them.
Not sure, however the game appears to use an interesting and quite scattered binding system.
So I'm wondering if a binding could be added to say the default mode section with the appropriate commands attached if that would work? Technically it shouldn't if we assume the game is in specific modes that relate to the associated sections as described here though. But who knows.
Typo corrected:
Since the conersations are fully skippable maybe the other section isn't read or used.
Modifié par Iron Spine, 05 février 2010 - 10:16 .
#145
Posté 05 février 2010 - 10:10
#146
Posté 05 février 2010 - 10:14
By the way I noticed the -log vaue int he GameCommanLine under editor earlier while just messing around looking at a few things and addd it to a shortcut.
It appears to cause the game to either launch a custom console or launch a command process with the output redirected into itself or a log file somewhere maybe. Or mabye its something else entirely, but it does pop up.
Modifié par Iron Spine, 05 février 2010 - 10:27 .
#147
Posté 05 février 2010 - 10:35
For the intro movies I've just renamed the two that play, that makes them not play.Catscratcher wrote...
So, Intro movies are in there by default. Yet, you can't use Spacebar or Esc to skip them.
rename ME_EAsig_720p_v2_raw.bik ---> _ME_EAsig_720p_v2_raw.bik
rename BWLogo.bik ---> _BWLogo.bik
I have no movie named "publisher" in the Movies folder.
I don't know about skipping ANY cutscene, but I CAN skip some cutscenes with spacebar. One in particular that can be skipped is the "dock" cutscene, when you select "dock" on the Normandy the cutscene can be skipped with spacebar or esc.
In other threads some users have reported that remapping the controls can cause some keypresses to no longer work as they were originally designed. So, remapping the spacebar to some other function MAY break the ability to skip a cutscene. Or, remapping the "use" function to the some other key may break the skip function.
@IronSpine
Well, the -log is probably only intended for the Editor and it doesn't do anything in the game. Same for any of the various "debug" ini entries, they only would work in a debug version of the program. Lots of unused ini entries are simply left in the file for possible future compatibility.
In the case of the game UnReal, there was an UnReal Editor, the same ini files were used for both the game and the Editor. And, of course, the Editor specific ini entries only worked in the Editor.
Modifié par zBobG, 05 février 2010 - 10:52 .
#148
Posté 05 février 2010 - 10:39
zBobG wrote...
...In other threads some users have reported that remapping the controls can cause some keypresses to no longer work as they were originally designed. So, remapping the spacebar to some other function MAY break the ability to skip a cutscene. Or, remapping a different function to the spacebar may break the skip function.
Yeah that's something I thought about 2 days ago while reviewing the binding and command system the game appears to employ and wondered if they had hard coded or otherwise not accounted for people customizing the controls more than they intended.
But we should also be able to find a middle ground of some sort, such a mappings keys that are not used at all by the game. + and - (keynames Add / Subtract) are the ones I chose to use when I implemented the noclip workarouind.
UPDATED:
Just some extra info related to the subject the (or one of the, if there are more) lists the game uses for keys is:
[SFXGame.SFXGameModemanager] Keynames in BIOGame
Modifié par Iron Spine, 05 février 2010 - 10:52 .
#149
Posté 05 février 2010 - 11:01
Remapping the spacebar to some other function MAY break the ability
to skip a cutscene. Or, remapping the "use" function to the some other
key may break the skip function.
Some users say that if the "Use" function has been remapped, then you would press that key instead to do whatever it was that the spacebar did before, including skip a cutscene I suppose.
My experience is that most recent games do not like you to remap the keyboard. It almost always causes problems somewhere. Usually you CAN figure out which keys do not like to be remapped.
I use a Logitech G13 where I can program any of its keys to any keypress, so I leave the keyboard mapping as it is.
[SFXGame.SFXGameModemanager]
That just maps an alias name to the internal hex code for the key. You could possibly add some keys if you could figure out the internal hex code. Those codes don't look familiar to me though, it looks like they are hardcoded into the game code rather than being derived from standard Windows keyboard codes.
Modifié par zBobG, 05 février 2010 - 11:10 .
#150
Posté 05 février 2010 - 11:19
[SFXGame.SFXGameModemanager]
That just maps an alias name to the internal hex code for the key. You could possibly add some keys if you could figure out the internal hex code. Those codes don't look familiar to me though, it looks like they are hardcoded into the game code rather than being derived from standard Windows keyboard codes.
No, those are the translation IDs for the name of the key.
Modifié par Thomas_R_Roy, 05 février 2010 - 11:20 .





Retour en haut




