Some GDA file format questions.
#1
Posté 05 août 2011 - 03:14
1. In the raw data block, there are column headers that have a 4 byte hash, 1 byte type id and 3 bytes of padding. Are there any way I can find what the hash stand for? I tried looking up the number in the talk table to no avail. Is there another DLL I have to peek through, if so, which one?
2. What are all types that the 2DA tables use and what are their IDs? I know (0, 1, 2 = int, string, float), but are there more of them? And what is the ID for talk-table references?
Thanks in advance
- Gisle Aune
#2
Posté 05 août 2011 - 05:09
much faster lookup speed. and there is a very slim chance that two strings produce the same hash in the same table.
#3
Posté 05 août 2011 - 05:13
http://social.bioware.com/project/755/
Check it out before you spend time building something that do the same thing.
#4
Posté 05 août 2011 - 10:29
I know it's a GFF file too, but I have ideas for how to get it written down. It's the hash comes before the row type and the padding.
I will post it when I get it to work for others to see and chew me out for whatever little flaw there is in there, when I get it tested.
Modifié par Gisle Aune, 05 août 2011 - 10:38 .
#5
Posté 05 août 2011 - 11:16
#6
Posté 05 août 2011 - 11:48
14 00 00 00 08 00 00 00 3c 00 00 00 06 00 00 00
36 c9 fb 66 01 ff ff ff 5d df c5 fe 01 ff ff ff
6e eb 11 d6 01 ff ff ff 1a 64 4a 8c 01 ff ff ff
ba b4 44 d6 01 ff ff ff 1f 32 9e 9f 02 ff ff ff
55 00 00 00 00 00 00 00 55 00 00 00 15 00 00 1d
See the underlined part and the 5 similiar numbers. Opening it up in the GFF editor to see a number in the millions say just as little.
(bolded part = raw data block's first integer)
Modifié par Gisle Aune, 05 août 2011 - 11:50 .
#7
Posté 06 août 2011 - 12:29
#8
Posté 06 août 2011 - 12:41
47 46 46 20 56 34 2e 30 50 43 20 20 47 32 44 41
56 30 2e 32 03 00 00 00 c4 00 00 00 67 74 6f 70 (gtop)
02 00 00 00 4c 00 00 00 08 00 00 00 63 6f 6c 6d (colm)
02 00 00 00 64 00 00 00 08 00 00 00 72 6f 77 73 (rows)
06 00 00 00 7c 00 00 00 18 00 00 00 12 27 00 00
01 00 00 c0 00 00 00 00 13 27 00 00 02 00 00 c0
04 00 00 00 11 27 00 00 04 00 00 00 00 00 00 00
f7 2a 00 00 00 00 00 00 04 00 00 00 15 27 00 00
05 00 00 00 00 00 00 00 16 27 00 00 05 00 00 00
04 00 00 00 17 27 00 00 05 00 00 00 08 00 00 00
18 27 00 00 05 00 00 00 0c 00 00 00 19 27 00 00
05 00 00 00 10 00 00 00 1a 27 00 00 08 00 00 00
14 00 00 00 08 00 00 00 3c 00 00 00 06 00 00 00
That makes it a valid 2DA with 6 row lists, for my class all this is only relevant upon saving it. I don't see how this will make my questions in the OP any clearer though. What is the underlined numbers in my last post storing?
Modifié par Gisle Aune, 06 août 2011 - 12:43 .
#9
Posté 06 août 2011 - 06:26
you can of course recognise a string by a hash. if you knew about it from the beginning. ie the same string will allways produce the same hash. so if you got both you can recognise them. if your missing the string, you will never now. because there is multiple strings in theory that produce the same hash. in reality those other string are unreadable junk.
#10
Posté 06 août 2011 - 06:48
Also, my other question still stands.
#11
Posté 06 août 2011 - 07:46
the second question is in the GFF format description:
http://social.biowar...t/index.php/GFF
#12
Posté 06 août 2011 - 07:50
#13
Posté 06 août 2011 - 10:10
#14
Posté 06 août 2011 - 11:27
#15
Posté 06 août 2011 - 07:36
If the field types don't look right to you, make sure they aren't being OR'd with some other flags.
It's been a while, but I'm not sure why you're talking about the type information in the raw data block.
If you want the actual names of every column like "Label", "Name", etc, I think you just have to go through the 2DA sources and CRC32 them to create a reverse lookup table.
Also, BioSpirit figured out where the constant names are stored in EditorGff40.dll, if that's what you were also asking about. But IIRC all that matters is already known - "gtop", "colm", and "rows".
Modifié par FollowTheGourd, 06 août 2011 - 07:46 .
#16
Posté 06 août 2011 - 08:31
#17
Posté 06 août 2011 - 08:44
Modifié par FollowTheGourd, 06 août 2011 - 08:47 .
#18
Posté 06 août 2011 - 09:47
Modifié par Gisle Aune, 06 août 2011 - 09:48 .
#19
Posté 07 août 2011 - 05:28
#20
Posté 07 août 2011 - 09:38
Is 2DA_BASE.xls exporting wrongly? Both Elys' GDApp and my read function differs from it.
Excel: 0, animations, ANIM_, **** (=0)
GDApp and my code: 0, Gender Information, gender, 0
I will post the class' code when I get adding rows, deleting rows and such working, which I have written, but not tested. As well as saving it, though I think I know how to approach that.
Modifié par Gisle Aune, 07 août 2011 - 11:25 .
#21
Posté 07 août 2011 - 10:52
Use M2DA_BASE.GDA to compare it with 2DA_BASE.XLS for your tests.
Modifié par elys, 07 août 2011 - 11:07 .
#22
Posté 08 août 2011 - 12:42
http://social.biowar...m/project/4953/
I am working on the save function. If anyone has information that might help on understanding the 01.00.00.c0 part, I would be grateful.
EDIT: After a bit of research, I got it now. I can now work on the raw data. Anyone have any info on how boolean and resources are stored? I really hope for 4-byte int and string though, shouldn't be hard to find out.
Modifié par Gisle Aune, 08 août 2011 - 01:12 .
#23
Posté 08 août 2011 - 01:52
Resources are stored the same way as strings.
Modifié par elys, 08 août 2011 - 02:27 .
#24
Posté 08 août 2011 - 02:06
It might be possible that I can post it today, as everything is going smoothly.
#25
Posté 08 août 2011 - 02:15
Wait, I had a doubt since I had not looked at this stuff for a long while. So I went back to it quickly.
So here it goes:
In your case for the Boolean, what matters is that Field Type = GFF_INT8 (1), and that the Field Index (4-byte unsigned offset to the location of the data from the beginning of the struct in the data block) is correctly pointing to your 4-byte stored boolean.
Anyway only the first byte will be read by the game since the engine is waiting for a GFF_INT8 according to the Field Type.
Modifié par elys, 08 août 2011 - 02:31 .





Retour en haut






